dom4j 解析 xml文件1

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 }

 

你可能感兴趣的:(dom4j)