xmlelement.java

来自「Online Map for Mobile」· Java 代码 · 共 147 行

JAVA
147 行
字号
import java.util.*;

public class XMLElement { 
    private XMLElement next;
    private XMLElement prev;
    private String     name;
    private Hashtable  siblings;
    private Hashtable  attributes;
    private Vector     siblingsList;
    private Vector     attributesList;
    private String     value;
    private int        counter;
        
    XMLElement(String name) { 
        this.name = name;
    }


    public String getName() { 
        return name;
    }
    
    final void addSibling(XMLElement elem) { 
        if (siblings == null) { 
            siblings = new Hashtable();
            siblingsList = new Vector();
        }
        XMLElement prev = (XMLElement)siblings.get(elem.name);
        if (prev != null) { 
            elem.next = null;
            elem.prev = prev.prev;
            elem.prev.next = elem;
            prev.prev = elem;
            prev.counter += 1;
        } else { 
            siblings.put(elem.name, elem);
            elem.prev = elem;
            elem.counter = 1;
        }
        siblingsList.addElement(elem);
    }
    
    final void addAttribute(String name, String value) { 
        XMLAttribute attr = new XMLAttribute(name, value);
        if (attributes == null) { 
            attributes = new Hashtable();
            attributesList = new Vector();
        }
        attributesList.addElement(attr);
        attributes.put(name, attr);
    }
   
    final Vector getSiblings() { 
        return siblingsList;
    }

    final Vector getAttributes() { 
        return attributesList;
    }

    final XMLElement getSibling(String name) { 
        if (siblings != null) { 
            XMLElement sibling = (XMLElement)siblings.get(name);
            if (sibling != null) {
                return sibling;
            }
        }
        return null;
    }
    
    final XMLElement getNextSibling() { 
        return next;
    }
    
    final int getCounter() { 
        return counter;
    }
    
    final XMLAttribute getAttribute(String name) { 
        return attributes != null ? (XMLAttribute)attributes.get(name) : null;
    }
    
    final void setValue(String value) { 
        this.value = value;
    }
    
    final String getValue() { 
        return value;
    }
    
    final int getIntValue() { 
        if (value == null) { 
            throw new XMLException("Value not set");
        }
        try { 
            return Integer.parseInt(value);
        } catch (NumberFormatException x) { 
            throw new XMLException("Element value '" + value + "' is not an integer constant");
        }
    }

    public Vector search(String pattern) {
        Vector result = new Vector();
        pattern = pattern.toUpperCase();
        if (siblingsList != null) { 
             for (int i = siblingsList.size(); --i >= 0;) { 
                 XMLElement elem = (XMLElement)siblingsList.elementAt(i);
                 if (elem.searchSiblings(pattern)) { 
                     result.addElement(elem);
                 }
             }
        }
        return result;
    }

    private boolean searchSiblings(String pattern) {
        if (name.toUpperCase().equals(pattern)) { 
            return true;
        }
        if (value != null) { 
            if (value.toUpperCase().indexOf(pattern) >= 0) { 
                return true;
            }
        }
        if (attributesList != null) { 
            for (int i = attributesList.size(); --i >= 0;) { 
                XMLAttribute attr = (XMLAttribute)attributesList.elementAt(i);
                if ((attr.getName() != null && attr.getName().toUpperCase().equals(pattern)) 
                    || (attr.getValue() != null && attr.getValue().toUpperCase().indexOf(pattern) >= 0))
                {
                    return true;
                }
            }
        }
        if (siblingsList != null) { 
             for (int i = siblingsList.size(); --i >= 0;) { 
                 XMLElement elem = (XMLElement)siblingsList.elementAt(i);
                 if (elem.searchSiblings(pattern)) { 
                     return true;
                 }
             }
        }
        return false;
    }
}        

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?