test2.xml文件:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <RecordSet> 3 <Record> 4 <COLL_ID type="int">2</COLL_ID> 5 <COLL_NAME type="varchar">192.168.8.42</COLL_NAME> 6 <COLL_TYPE type="varchar">0</COLL_TYPE> 7 <IP_ADDR type="varchar">192.168.8.42</IP_ADDR> 8 <CREATE_TIME type="datetime">2012-11-22 11:12:03</CREATE_TIME> 9 <FIELD_1 type="nvarchar"/> 10 <FIELD_2 type="nvarchar"/> 11 <IS_ONLINE>0</IS_ONLINE> 12 <CHILD/> 13 </Record> 14 <Record> 15 <COLL_ID>3</COLL_ID> 16 <COLL_NAME>gsp-coll</COLL_NAME> 17 <COLL_TYPE>0</COLL_TYPE> 18 <IP_ADDR>192.168.8.159</IP_ADDR> 19 <CREATE_TIME>2012-11-22 11:25:20</CREATE_TIME> 20 <FIELD_1/> 21 <FIELD_2/> 22 <IS_ONLINE>0</IS_ONLINE> 23 <CHILD> 24 <Record> 25 <COLL_ID type="int">100</COLL_ID> 26 <COLL_NAME type="varchar">100</COLL_NAME> 27 <COLL_TYPE type="varchar">100</COLL_TYPE> 28 <IP_ADDR type="varchar">100</IP_ADDR> 29 <CREATE_TIME type="datetime">1111-11-11 11:11:11</CREATE_TIME> 30 <FIELD_1 type="nvarchar"/> 31 <FIELD_2 type="nvarchar"/> 32 <IS_ONLINE>100</IS_ONLINE> 33 </Record> 34 </CHILD> 35 </Record> 36 <Record> 37 <COLL_ID>4</COLL_ID> 38 <COLL_NAME>192.168.8.145</COLL_NAME> 39 <COLL_TYPE>0</COLL_TYPE> 40 <IP_ADDR>192.168.8.145</IP_ADDR> 41 <CREATE_TIME>2012-11-22 11:47:15</CREATE_TIME> 42 <FIELD_1/> 43 <FIELD_2/> 44 <IS_ONLINE>0</IS_ONLINE> 45 <CHILD/> 46 </Record> 47 <Record> 48 <COLL_ID type="String">6</COLL_ID> 49 <COLL_NAME>coll160</COLL_NAME> 50 <COLL_TYPE>0</COLL_TYPE> 51 <IP_ADDR>192.168.8.160</IP_ADDR> 52 <CREATE_TIME>2012-11-27 10:01:54</CREATE_TIME> 53 <FIELD_1/> 54 <FIELD_2/> 55 <IS_ONLINE>0</IS_ONLINE> 56 <CHILD> 57 <Record> 58 <COLL_ID type="String">10000</COLL_ID> 59 <COLL_NAME type="varchar">10000</COLL_NAME> 60 <COLL_TYPE type="varchar">10000</COLL_TYPE> 61 <IP_ADDR type="varchar">10000</IP_ADDR> 62 <CREATE_TIME type="datetime">1000-1-1 1:1:1</CREATE_TIME> 63 <FIELD_1 type="nvarchar"/> 64 <FIELD_2 type="nvarchar"/> 65 <IS_ONLINE>10000</IS_ONLINE> 66 <CHILD/> 67 </Record> 68 </CHILD> 69 </Record> 70 <Record> 71 <COLL_ID>7</COLL_ID> 72 <COLL_NAME>153</COLL_NAME> 73 <COLL_TYPE>0</COLL_TYPE> 74 <IP_ADDR>192.168.8.153</IP_ADDR> 75 <CREATE_TIME>2012-12-03 16:08:43</CREATE_TIME> 76 <FIELD_1/> 77 <FIELD_2/> 78 <IS_ONLINE>0</IS_ONLINE> 79 <CHILD/> 80 </Record> 81 <Record type="many"> 82 <COLL_ID>8</COLL_ID> 83 <COLL_NAME>gsp-coll</COLL_NAME> 84 <COLL_TYPE>0</COLL_TYPE> 85 <IP_ADDR>192.168.8.159</IP_ADDR> 86 <CREATE_TIME>2012-11-22 11:25:20</CREATE_TIME> 87 <FIELD_1/> 88 <FIELD_2/> 89 <IS_ONLINE>0</IS_ONLINE> 90 <CHILD> 91 <Record> 92 <COLL_ID type="int">888</COLL_ID> 93 <COLL_NAME type="varchar">88</COLL_NAME> 94 <COLL_TYPE type="varchar">88</COLL_TYPE> 95 <IP_ADDR type="varchar">888</IP_ADDR> 96 <CREATE_TIME type="datetime">1111-11-11 11:11:11</CREATE_TIME> 97 <FIELD_1 type="nvarchar"/> 98 <FIELD_2 type="nvarchar"/> 99 <IS_ONLINE>888</IS_ONLINE> 100 <CHILD/> 101 </Record> 102 </CHILD> 103 </Record> 104 <Record1> 105 <TotalCount>5</TotalCount> 106 </Record1> 107 </RecordSet>
1 package testDom4j; 2 3 import java.io.InputStream; 4 import java.net.MalformedURLException; 5 import java.net.URL; 6 import java.util.Iterator; 7 import java.util.List; 8 9 import org.dom4j.Attribute; 10 import org.dom4j.Document; 11 import org.dom4j.DocumentException; 12 import org.dom4j.DocumentHelper; 13 import org.dom4j.Element; 14 import org.dom4j.QName; 15 import org.dom4j.io.SAXReader; 16 17 public class XMLLoader 18 { 19 20 private Document doc = null; 21 22 /** 23 * 根据提供的xml文件解析xml以下代码从File中或一个URL中读取一个XML文件,并产生一个Document对象。 一个Document对象表示了内存中的一棵XML树,可以在这个XML树中进行遍历、查询、修改等操作。 24 * @param file "/result.xml" ; 25 * @throws MalformedURLException 26 * @throws DocumentException 27 */ 28 public void parseWithSAXFile(String file) throws MalformedURLException, DocumentException 29 { 30 InputStream f = XMLLoader.class.getResourceAsStream(file); 31 SAXReader xmlReader = new SAXReader(); 32 this.doc = xmlReader.read(f); 33 return; 34 } 35 36 /** 37 * @param url 根据提供的xml url路径 38 * @throws MalformedURLException 39 * @throws DocumentException 40 */ 41 public void parseWithSAX(URL url) throws MalformedURLException, DocumentException 42 { 43 SAXReader xmlReader = new SAXReader(); 44 this.doc = xmlReader.read(url); 45 return; 46 } 47 48 /** 49 * @param xml 根据提供的xml字符串解析xml 50 * @throws MalformedURLException 51 * @throws DocumentException 52 */ 53 public void parseWithSAX(String xml) throws MalformedURLException, DocumentException 54 { 55 this.doc = DocumentHelper.parseText(xml); 56 // SAXReader reader = new SAXReader(); 57 // Document d = reader.read(TestDom4j.class.getResourceAsStream("/result.xml")); 58 // Document document = DocumentHelper.parseText(d.asXML()); 59 // DocumentHelper.parseText()把字符串转换成dom 60 // ee.asXML()把Element 元素转换成String 61 } 62 63 /** 64 * QName对象表示了一个XML元素或属性的qualified name,即一个namespace和一个local name的二元组。 Namespace对象表示了QName二元组中的namespace部分,它由prefix和URI两部分组成 <heavyz:Sample 65 * <heavyz:Sample xmlns:heavyz="http://www.heavyzheng.com/schema/sample.xsd"> <heavyz:HelloWorld/> </heavyz:Sample> 66 **/ 67 public void printRootQNameInfo(Document doc) 68 { 69 Element root = doc.getRootElement(); 70 QName qname = root.getQName(); 71 System.out.println("local name : " + qname.getName()); 72 System.out.println("空间前缀 namespace prefix: " + qname.getNamespacePrefix()); 73 System.out.println("namespace URI : " + qname.getNamespaceURI()); 74 System.out.println("修饰名称qualified name : " + qname.getQualifiedName()); 75 return; 76 } 77 78 /** 79 * 对Document对象调用getRootElement()方法可以返回代表根节点的Element对象. 拥有了一个Element对象后,可以对该对象调用elementIterator()方法获得它的子节点的Element对象们的一个iterator。 80 * 使用(Element)iterator.next()方法遍历一个iterator并把每个取出的元素转化为Element类型。 81 */ 82 83 public void printXMLTree(Document doc) 84 { 85 Element root = doc.getRootElement(); 86 printElement(root, 0); 87 return; 88 } 89 90 private void printElement(Element element, int level) 91 { 92 // print indent 93 for (int i = 0; i < level; i++) 94 { 95 System.out.print(" "); 96 } 97 System.out.println(element.getQualifiedName()); 98 Iterator iter = element.elementIterator(); 99 while (iter.hasNext()) 100 { 101 Element sub = (Element) iter.next(); 102 printElement(sub, level + 2); 103 } 104 return; 105 } 106 107 public void getChildNode(Document doc) 108 { 109 // System.out.println(doc.asXML()); 110 Element data = doc.getRootElement(); 111 // 获取根节点下的Record节点 "./Record"表示当前节点,//Record 表示根节点下所有节点 112 List<Element> listTable = data.selectNodes("./Record"); 113 Iterator iterTable = listTable.iterator(); 114 while (iterTable.hasNext()) 115 { 116 Element iterRecord = (Element) iterTable.next(); 117 Element ecollid = iterRecord.element("COLL_ID"); 118 Element recordChild = iterRecord.element("CHILD"); 119 // 判断是否有子节点 120 if (recordChild.element("Record") != null) 121 // // 判断是否有子节点 122 // if (recordChild.elements().size() > 0) 123 { 124 System.out.println("父节点COLL_ID:" + iterRecord.elementTextTrim("COLL_ID")); 125 Element eChild = recordChild.element("Record"); 126 System.out.println("子节点COLL_ID:" + eChild.elementTextTrim("COLL_ID")); 127 } 128 else 129 { 130 System.out.println("没有子节点,父节点COLL_ID:" + iterRecord.elementTextTrim("COLL_ID")); 131 132 } 133 Attribute type = ecollid.attribute("type"); 134 String typeValue = ""; 135 // 判断是否有属性type 136 if (type != null) 137 { 138 typeValue = type.getValue(); 139 } 140 System.out.println("父节点COLL_ID 属性值:" + typeValue); 141 } 142 } 143 144 public static void main(String[] args) 145 { 146 XMLLoader test = new XMLLoader(); 147 try 148 { 149 test.parseWithSAXFile("/test2.xml"); 150 } 151 catch (MalformedURLException e) 152 { 153 e.printStackTrace(); 154 } 155 catch (DocumentException e) 156 { 157 e.printStackTrace(); 158 } 159 // test.printRootQNameInfo(test.doc); 160 // test.printXMLTree(test.doc); 161 test.getChildNode(test.doc); 162 } 163 }