zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    2020/11/15助教一周小结(第十一周)
    神经网络--理解
    案例一:鸢尾花数据的分类
    TF2基础知识
    软件工程助教工作总结
    软工课程改进建议
    2020-12-27 助教一周小结(第十七周)
    2020-12-20 助教一周小结(第十六周)
    2020-12-13 助教一周小结(第十五周)
    2020-12-06 助教一周小结(第十四周)
  • 原文地址:https://www.cnblogs.com/liwei45212/p/3028523.html
Copyright © 2011-2022 走看看