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