1 56 57 package dom.treewalker; 58 import java.io.ByteArrayOutputStream ; 59 import java.io.OutputStreamWriter ; 60 import java.io.PrintWriter ; 61 62 import javax.xml.parsers.DocumentBuilder ; 63 import javax.xml.parsers.DocumentBuilderFactory ; 64 import javax.xml.parsers.ParserConfigurationException ; 65 66 import org.w3c.dom.Document ; 67 import org.w3c.dom.Element ; 68 import org.w3c.dom.Node ; 69 import org.w3c.dom.Text ; 70 import org.w3c.dom.traversal.DocumentTraversal; 71 import org.w3c.dom.traversal.NodeFilter; 72 import org.w3c.dom.traversal.TreeWalker; 73 74 75 82 public class TestFirstChild { 83 84 public static void main(String args[]) throws Exception { 85 86 87 System.out.println(" --- " 88 + org.enhydra.apache.xerces.framework.Version.fVersion 89 + " --- "); 90 Document doc = getNodeSet1(); 91 NodeFilter nodefilter = null; 92 boolean entityReferenceExpansion = true; 93 int whatToShow = NodeFilter.SHOW_ALL; 94 TreeWalker treewalker = 95 ((DocumentTraversal) doc).createTreeWalker(doc, whatToShow, 96 nodefilter, entityReferenceExpansion); 97 ByteArrayOutputStream bytearrayoutputstream = 98 new ByteArrayOutputStream (); 99 PrintWriter printwriter = 100 new PrintWriter (new OutputStreamWriter (bytearrayoutputstream, 101 "UTF8")); 102 103 process2(treewalker, printwriter); 104 printwriter.flush(); 105 106 System.out.println(); 107 System.out.println("Testing the following XML document:\n" + new String (bytearrayoutputstream.toByteArray())); 108 } 109 110 116 private static Document getNodeSet1() 117 throws ParserConfigurationException { 118 119 DocumentBuilderFactory dfactory = 120 DocumentBuilderFactory.newInstance(); 121 122 dfactory.setValidating(false); 123 dfactory.setNamespaceAware(true); 124 125 DocumentBuilder db = dfactory.newDocumentBuilder(); 126 Document doc = db.newDocument(); 127 Element root = doc.createElement("RootElement"); 128 Element e1 = doc.createElement("Element1"); 129 Element e2 = doc.createElement("Element2"); 130 Element e3 = doc.createElement("Element3"); 131 Text e3t = doc.createTextNode("Text in Element3"); 132 133 e3.appendChild(e3t); 134 root.appendChild(e1); 135 root.appendChild(e2); 136 root.appendChild(e3); 137 doc.appendChild(root); 138 139 String s1 ="<RootElement><Element1/><Element2/><Element3>Text in Element3</Element3></RootElement>"; 140 141 return doc; 142 } 143 144 153 private static void process2(TreeWalker treewalker, 154 PrintWriter printwriter) { 155 156 Node currentNode = treewalker.getCurrentNode(); 157 158 switch (currentNode.getNodeType()) { 159 160 case Node.TEXT_NODE : 161 case Node.CDATA_SECTION_NODE : 162 printwriter.print(currentNode.getNodeValue()); 163 break; 164 165 case Node.ENTITY_REFERENCE_NODE : 166 case Node.DOCUMENT_NODE : 167 case Node.ELEMENT_NODE : 168 default : 169 if (currentNode.getNodeType() == Node.ELEMENT_NODE) { 170 printwriter.print('<'); 171 printwriter.print(currentNode.getNodeName()); 172 printwriter.print(">"); 173 } 174 175 Node node1 = treewalker.firstChild(); 176 177 if (node1 == null) { 178 System.out.println(getNodeTypeString(currentNode.getNodeType()) 179 + "_NODE parent: " 180 + currentNode.getNodeName() 181 + " has no children "); 182 } 183 else { 184 System.out.println(getNodeTypeString(currentNode.getNodeType()) 185 + "_NODE parent: " 186 + currentNode.getNodeName() 187 + " has children "); 188 189 while (node1 != null) { 190 { 191 String qStr = ""; 192 193 for (Node q = node1; q != null; q = q.getParentNode()) { 194 qStr = q.getNodeName() + "/" + qStr; 195 } 196 197 System.out.println(getNodeTypeString(currentNode.getNodeType()) 198 + "_NODE process child " + qStr); 199 } 200 201 202 process2(treewalker, printwriter); 204 205 node1 = treewalker.nextSibling(); 206 if (node1 != null) { 207 System.out.println("treewalker.nextSibling() = " 208 + node1.getNodeName()); 209 } 210 } } 212 213 System.out.println("setCurrentNode() back to " 214 + currentNode.getNodeName()); 215 treewalker.setCurrentNode(currentNode); 216 217 if (currentNode.getNodeType() == Node.ELEMENT_NODE) { 218 printwriter.print("</"); 219 printwriter.print(currentNode.getNodeName()); 220 printwriter.print(">"); 221 } 222 223 break; 224 } 225 } 226 227 228 private static String [] nodeTypeString = new String []{ "", "ELEMENT", 229 "ATTRIBUTE", 230 "TEXT_NODE", 231 "CDATA_SECTION", 232 "ENTITY_REFERENCE", 233 "ENTITY", 234 "PROCESSING_INSTRUCTION", 235 "COMMENT", 236 "DOCUMENT", 237 "DOCUMENT_TYPE", 238 "DOCUMENT_FRAGMENT", 239 "NOTATION"}; 240 241 242 243 255 public static String getNodeTypeString(short nodeType) { 256 257 if ((nodeType > 0) && (nodeType < 13)) { 258 return nodeTypeString[nodeType]; 259 } 260 else { 261 return ""; 262 } 263 } 264 265 } 266 | Popular Tags |