xuxiuxi
2017-07-17 e8b108bd133a2a3a2d9aef0cccf0353d2bd73c7e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package com.awsle.aibatis.xml.engine.xml.dom;
 
import com.awsle.aibatis.xml.engine.xml.XMLReader;
 
import org.w3c.dom.*;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class DomXMLReader implements XMLReader {
 
    private Element currentElement;
    private List childElementsByIndex;
    private Map childElementsByName;
    private StringBuffer textBuffer;
 
    public DomXMLReader(Element rootElement) {
        setCurrent(rootElement);
    }
 
    public DomXMLReader(Document document) {
        setCurrent(document.getDocumentElement());
    }
 
    public String name() {
        return currentElement.getTagName();
    }
 
    public String text() {
        //return currentElement.getText();
        return textBuffer.toString();
    }
 
    public String attribute(String name) {
        Attr attribute = currentElement.getAttributeNode(name);
        return attribute == null ? null : attribute.getValue();
    }
 
    public int childCount() {
        return childElementsByIndex.size();
    }
 
    public void child(int index) {
        setCurrent(childElementsByIndex.get(index));
    }
 
    public void child(String elementName) {
        setCurrent(childElementsByName.get(elementName));
    }
 
    public void pop() {
        setCurrent(currentElement.getParentNode());
    }
 
    private void setCurrent(Object currentElementObj) {
        this.currentElement = (Element) currentElementObj;
        childElementsByIndex = new ArrayList();
        childElementsByName = new HashMap();
        textBuffer = new StringBuffer();
        NodeList childNodes = currentElement.getChildNodes();
        int length = childNodes.getLength();
        for (int i = 0; i < length; i++) {
            Node childNode = childNodes.item(i);
            if (childNode instanceof Element) {
                Element element = (Element) childNode;
                childElementsByIndex.add(element);
                childElementsByName.put(element.getTagName(), element);
            } else if (childNode instanceof Text) {
                Text text = (Text) childNode;
                textBuffer.append(text.getData());
            }
        }
    }
 
    public boolean childExists(String elementName) {
        return childElementsByName.containsKey(elementName);
    }
 
}