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 }

优质内容筛选与推荐>>
1、裸BFS题若干
2、form表单和ajax发送文件以及ajax发送json字符串
3、内存泄漏-草稿
4、Java Android 开发数字不足位数前面补0
5、React性能优化之PureComponent 和 memo使用分析


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn