站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        dom4j讀取xml(筆記)

        Java代碼 

        1.   

        2. SAXReader reader = new SAXReader();    

        3. Document doc = reader.read(…);    

        4. List childNodes = doc.selectNodes(“//Config/Child/ChildNode”);    

        5. for(Object obj:childNodes) {    

        6. Node childNode = (Node)obj;    

        7.   

        8. String name = childNode.valueOf(“@name”);    

        9. String text = childNode.getText();    

        10. }    

        11.   

        12.   

        13.   

        14. 一.Document對象相關(guān)   

        15.   

        16. 1.讀取XML文件,獲得document對象.   

        17.              SAXReader reader = new SAXReader();   

        18.              Document   document = reader.read(new File(“input.xml”));   

        19.   

        20. 2.解析XML形式的文本,得到document對象.   

        21.              String text = “<members></members>”;   

        22.              Document document = DocumentHelper.parseText(text);   

        23. 3.主動創(chuàng)建document對象.   

        24.              Document document = DocumentHelper.createDocument();   

        25.              Element root = document.addElement(“members”);// 創(chuàng)建根節(jié)點   

        26. 二.節(jié)點相關(guān)   

        27.   

        28. 1.獲取文檔的根節(jié)點.   

        29. Element rootElm = document.getRootElement();   

        30. 2.取得某節(jié)點的單個子節(jié)點.   

        31. Element memberElm=root.element(“member”);// “member”是節(jié)點名   

        32. 3.取得節(jié)點的文字   

        33. String text=memberElm.getText();也可以用:   

        34. String text=root.elementText(“name”);這個是取得根節(jié)點下的name字節(jié)點的文字.   

        35.   

        36. 4.取得某節(jié)點下名為”member”的所有字節(jié)點并進(jìn)行遍歷.   

        37. List nodes = rootElm.elements(“member”);   

        38.   

        39. for (Iterator it = nodes.iterator(); it.hasNext();) {   

        40.     Element elm = (Element) it.next();   

        41.    // do something   

        42. }   

        43. 5.對某節(jié)點下的所有子節(jié)點進(jìn)行遍歷.   

        44.             for(Iterator it=root.elementIterator();it.hasNext();){   

        45.                  Element element = (Element) it.next();   

        46.                 // do something   

        47.              }   

        48. 6.在某節(jié)點下添加子節(jié)點.   

        49. Element ageElm = newMemberElm.addElement(“age”);   

        50. 7.設(shè)置節(jié)點文字.   

        51. ageElm.setText(“29”);   

        52. 8.刪除某節(jié)點.   

        53. parentElm.remove(childElm);// childElm是待刪除的節(jié)點,parentElm是其父節(jié)點   

        54. 9.添加一個CDATA節(jié)點.   

        55.          Element contentElm = infoElm.addElement(“content”);   

        56.          contentElm.addCDATA(diary.getContent());   

        57.   

        58. 三.屬性相關(guān).   

        59. 1.取得某節(jié)點下的某屬性   

        60.              Element root=document.getRootElement();       

        61.              Attribute attribute=root.attribute(“size”);// 屬性名name   

        62. 2.取得屬性的文字   

        63.              String text=attribute.getText();也可以用:   

        64. String text2=root.element(“name”).attributeValue(“firstname”);這個是取得根節(jié)點下name字節(jié)點的屬性firstname的值.   

        65.   

        66. 3.遍歷某節(jié)點的所有屬性   

        67.              Element root=document.getRootElement();       

        68.             for(Iterator it=root.attributeIterator();it.hasNext();){   

        69.                  Attribute attribute = (Attribute) it.next();   

        70.                  String text=attribute.getText();   

        71.                  System.out.println(text);   

        72.              }   

        73. 4.設(shè)置某節(jié)點的屬性和文字.   

        74. newMemberElm.addAttribute(“name”, “sitinspring”);   

        75. 5.設(shè)置屬性的文字   

        76.              Attribute attribute=root.attribute(“name”);   

        77.              attribute.setText(“sitinspring”);   

        78. 6.刪除某屬性   

        79.              Attribute attribute=root.attribute(“size”);// 屬性名name   

        80.              root.remove(attribute);   

        81. 四.將文檔寫入XML文件.   

        82. 1.文檔中全為英文,不設(shè)置編碼,直接寫入的形式.   

        83. XMLWriter writer = new XMLWriter(new FileWriter(“output.xml”));   

        84. writer.write(document);   

        85. writer.close();   

        86. 2.文檔中含有中文,設(shè)置編碼格式寫入的形式.   

        87.              OutputFormat format = OutputFormat.createPrettyPrint();   

        88.              format.setEncoding(“GBK”);    // 指定XML編碼           

        89.              XMLWriter writer = new XMLWriter(new FileWriter(“output.xml”),format);   

        90.                

        91.              writer.write(document);   

        92.              writer.close();   

        93. 五.字符串與XML的轉(zhuǎn)換   

        94. 1.將字符串轉(zhuǎn)化為XML   

        95. String text = “<members> <member>sitinspring</member> </members>”;   

        96. Document document = DocumentHelper.parseText(text);   

        97. 2.將文檔或節(jié)點的XML轉(zhuǎn)化為字符串.   

        98.              SAXReader reader = new SAXReader();   

        99.              Document   document = reader.read(new File(“input.xml”));               

        100.              Element root=document.getRootElement();                   

        101.              String docXmlText=document.asXML();   

        102.              String rootXmlText=root.asXML();   

        103.              Element memberElm=root.element(“member”);   

        104.              String memberXmlText=memberElm.asXML();   

        105.   

        106.   

        107.   

        108.   

        109. dom4j API 包含一個解析 XML 文檔的工具。本文中將使用這個解析器創(chuàng)建一個示例 XML 文檔。清單 1 顯示了這個示例 XML 文檔,catalog.xml。   

        110.   

        111. 清單 1. 示例 XML 文檔(catalog.xml)    

        112. <?xml version=”1.0″ encoding=”UTF-8″?>    

        113. <catalog>    

        114. <!–An XML Catalog–>    

        115. <?target instruction?>   

        116.   <journal title=”XML Zone”    

        117.                   publisher=”IBM developerWorks”>    

        118. <article level=”Intermediate” date=”December-2001″>   

        119.  <title>Java configuration with XML Schema</title>    

        120.  <author>    

        121.      <firstname>Marcello</firstname>    

        122.      <lastname>Vitaletti</lastname>    

        123.  </author>   

        124.   </article>   

        125.   </journal>    

        126. </catalog>   

        127.     

        128.   

        129.   

        130. 然后使用同一個解析器修改 catalog.xml,清單 2 是修改后的 XML 文檔,catalog-modified.xml。   

        131.   

        132. 清單 2. 修改后的 XML 文檔(catalog-modified.xml)    

        133. <?xml version=”1.0″ encoding=”UTF-8″?>    

        134. <catalog>    

        135. <!–An XML catalog–>    

        136. <?target instruction?>   

        137.   <journal title=”XML Zone”  

        138.                    publisher=”IBM developerWorks”>    

        139. <article level=”Introductory” date=”October-2002″>   

        140.  <title>Create flexible and extensible XML schemas</title>    

        141.  <author>    

        142.      <firstname>Ayesha</firstname>    

        143.      <lastname>Malik</lastname>    

        144.  </author>    

        145.   </article>   

        146.   </journal>    

        147. </catalog>   

        148.     

        149.   

        150.   

        151. 與 W3C DOM API 相比,使用 dom4j 所包含的解析器的好處是 dom4j 擁有本地的 XPath 支持。DOM 解析器不支持使用 XPath 選擇節(jié)點。   

        152.   

        153. 本文包括以下幾個部分:   

        154.   

        155. 預(yù)先設(shè)置    

        156. 創(chuàng)建文檔    

        157. 修改文檔    

        158. 預(yù)先設(shè)置   

        159.   

        160. 這個解析器可以從 http://dom4j.org 獲取。通過設(shè)置使 dom4j-1.4/dom4j-full.jar 能夠在 classpath 中訪問,該文件中包括 dom4j 類、XPath 引擎以及 SAX 和 DOM 接口。如果已經(jīng)使用了 JAXP 解析器中包含的 SAX 和 DOM 接口,向 classpath 中增加 dom4j-1.4/dom4j.jar 。 dom4j.jar 包括 dom4j 類和 XPath 引擎,但是不含 SAX 與 DOM 接口。    

        161.   

        162.   

        163.   

        164.     

        165.   

        166.   

        167.  回頁首    

        168.     

        169.   

        170.   

        171.   

        172. 創(chuàng)建文檔   

        173.   

        174. 本節(jié)討論使用 dom4j API 創(chuàng)建 XML 文檔的過程,并創(chuàng)建示例 XML 文檔 catalog.xml。   

        175.   

        176. 使用 import 語句導(dǎo)入 dom4j API 類:   

        177.   

        178. import org.dom4j.Document;   

        179. import org.dom4j.DocumentHelper;   

        180. import org.dom4j.Element;   

        181.     

        182.   

        183.   

        184. 使用 DocumentHelper 類創(chuàng)建一個文檔實例。 DocumentHelper 是生成 XML 文檔節(jié)點的 dom4j API 工廠類。    

        185.   

        186.  Document document = DocumentHelper.createDocument();    

        187.   

        188.   

        189. 使用 addElement() 方法創(chuàng)建根元素 catalog 。 addElement() 用于向 XML 文檔中增加元素。    

        190.   

        191. Element catalogElement = document.addElement(“catalog”);    

        192.   

        193.   

        194. 在 catalog 元素中使用 addComment() 方法添加注釋“An XML catalog”。    

        195.   

        196.  catalogElement.addComment(“An XML catalog”);    

        197.   

        198.   

        199. 在 catalog 元素中使用 addProcessingInstruction() 方法增加一個處理指令。    

        200.   

        201. catalogElement.addProcessingInstruction(“target”,”text”);    

        202.   

        203.   

        204. 在 catalog 元素中使用 addElement() 方法增加 journal 元素。    

        205.   

        206. Element journalElement =  catalogElement.addElement(“journal”);    

        207.   

        208.   

        209. 使用 addAttribute() 方法向 journal 元素添加 title 和 publisher 屬性。    

        210.   

        211. journalElement.addAttribute(“title”, “XML Zone”);   

        212.          journalElement.addAttribute(“publisher”, “IBM developerWorks”);    

        213.   

        214.   

        215. 向 article 元素中添加 journal 元素。    

        216.   

        217. Element articleElement=journalElement.addElement(“article”);    

        218.   

        219.   

        220. 為 article 元素增加 level 和 date 屬性。    

        221.   

        222. articleElement.addAttribute(“level”, “Intermediate”);   

        223.       articleElement.addAttribute(“date”, “December-2001”);    

        224.   

        225.   

        226. 向 article 元素中增加 title 元素。    

        227.   

        228. Element titleElement=articleElement.addElement(“title”);    

        229.   

        230.   

        231. 使用 setText() 方法設(shè)置 article 元素的文本。    

        232.   

        233. titleElement.setText(“Java configuration with XML Schema”);    

        234.   

        235.   

        236. 在 article 元素中增加 author 元素。    

        237.   

        238. Element authorElement=articleElement.addElement(“author”);    

        239.   

        240.   

        241. 在 author 元素中增加 firstname 元素并設(shè)置該元素的文本。    

        242.   

        243. Element  firstNameElement=authorElement.addElement(“firstname”);   

        244.      firstNameElement.setText(“Marcello”);    

        245.   

        246.   

        247. 在 author 元素中增加 lastname 元素并設(shè)置該元素的文本。    

        248.   

        249. Element lastNameElement=authorElement.addElement(“lastname”);   

        250.      lastNameElement.setText(“Vitaletti”);    

        251.   

        252.   

        253. 可以使用 addDocType() 方法添加文檔類型說明。    

        254.   

        255. document.addDocType(“catalog”, null,”file://c:/Dtds/catalog.dtd”);    

        256.   

        257.   

        258. 這樣就向 XML 文檔中增加文檔類型說明:   

        259.   

        260. <!DOCTYPE catalog SYSTEM “file://c:/Dtds/catalog.dtd”>    

        261.   

        262.   

        263. 如果文檔要使用文檔類型定義(DTD)文檔驗證則必須有 Doctype。   

        264.   

        265. XML 聲明 <?xml version=”1.0″ encoding=”UTF-8″?> 自動添加到 XML 文檔中。    

        266.   

        267. 清單 3 所示的例子程序 XmlDom4J.java 用于創(chuàng)建 XML 文檔 catalog.xml。   

        268.   

        269. 清單 3. 生成 XML 文檔 catalog.xml 的程序(XmlDom4J.java)    

        270. import org.dom4j.Document;   

        271. import org.dom4j.DocumentHelper;   

        272. import org.dom4j.Element;   

        273. import org.dom4j.io.XMLWriter;   

        274. import java.io.*;   

        275. public class XmlDom4J{   

        276. public void generateDocument(){   

        277. Document document = DocumentHelper.createDocument();   

        278.      Element catalogElement = document.addElement(“catalog”);   

        279.      catalogElement.addComment(“An XML Catalog”);   

        280.      catalogElement.addProcessingInstruction(“target”,”text”);   

        281.      Element journalElement =  catalogElement.addElement(“journal”);   

        282.      journalElement.addAttribute(“title”, “XML Zone”);   

        283.      journalElement.addAttribute(“publisher”, “IBM developerWorks”);   

        284.      Element articleElement=journalElement.addElement(“article”);   

        285.      articleElement.addAttribute(“level”, “Intermediate”);   

        286.      articleElement.addAttribute(“date”, “December-2001”);   

        287.      Element  titleElement=articleElement.addElement(“title”);   

        288.      titleElement.setText(“Java configuration with XML Schema”);   

        289.      Element authorElement=articleElement.addElement(“author”);   

        290.      Element  firstNameElement=authorElement.addElement(“firstname”);   

        291.      firstNameElement.setText(“Marcello”);   

        292.      Element lastNameElement=authorElement.addElement(“lastname”);   

        293.      lastNameElement.setText(“Vitaletti”);   

        294.      document.addDocType(“catalog”,   

        295.                            null,”file://c:/Dtds/catalog.dtd”);   

        296.     try{   

        297.     XMLWriter output = new XMLWriter(   

        298.             new FileWriter( new File(“c:/catalog/catalog.xml”) ));   

        299.         output.write( document );   

        300.         output.close();   

        301.         }   

        302.      catch(IOException e){System.out.println(e.getMessage());}   

        303. }   

        304. public static void main(String[] argv){   

        305. XmlDom4J dom4j=new XmlDom4J();   

        306. dom4j.generateDocument();   

        307. }}   

        308.     

        309.   

        310.   

        311. 這一節(jié)討論了創(chuàng)建 XML 文檔的過程,下一節(jié)將介紹使用 dom4j API 修改這里創(chuàng)建的 XML 文檔。    

        312.   

        313.   

        314.   

        315.     

        316.   

        317.   

        318.  回頁首    

        319.     

        320.   

        321.   

        322.   

        323. 修改文檔   

        324.   

        325. 這一節(jié)說明如何使用 dom4j API 修改示例 XML 文檔 catalog.xml。   

        326.   

        327. 使用 SAXReader 解析 XML 文檔 catalog.xml:   

        328.   

        329. SAXReader saxReader = new SAXReader();   

        330.  Document document = saxReader.read(inputXml);    

        331.   

        332.   

        333. SAXReader 包含在 org.dom4j.io 包中。    

        334.   

        335. inputXml 是從 c:/catalog/catalog.xml 創(chuàng)建的 java.io.File。使用 XPath 表達(dá)式從 article 元素中獲得 level 節(jié)點列表。如果 level 屬性值是“Intermediate”則改為“Introductory”。    

        336.   

        337. List list = document.selectNodes(“//article/@level” );   

        338.       Iterator iter=list.iterator();   

        339.         while(iter.hasNext()){   

        340.             Attribute attribute=(Attribute)iter.next();   

        341.                if(attribute.getValue().equals(“Intermediate”))   

        342.                attribute.setValue(“Introductory”);    

        343.        }    

        344.   

        345.   

        346. 獲取 article 元素列表,從 article 元素中的 title 元素得到一個迭代器,并修改 title 元素的文本。    

        347.   

        348. list = document.selectNodes(“//article” );   

        349.      iter=list.iterator();   

        350.    while(iter.hasNext()){   

        351.        Element element=(Element)iter.next();   

        352.       Iterator iterator=element.elementIterator(“title”);   

        353.    while(iterator.hasNext()){   

        354.    Element titleElement=(Element)iterator.next();   

        355.    if(titleElement.getText().equals(“Java configuration with XML Schema”))   

        356.      titleElement.setText(“Create flexible and extensible XML schema”);   

        357.     }}    

        358.   

        359.   

        360. 通過和 title 元素類似的過程修改 author 元素。    

        361.   

        362. 清單 4 所示的示例程序 Dom4JParser.java 用于把 catalog.xml 文檔修改成 catalog-modified.xml 文檔。   

        363.   

        364. 清單 4. 用于修改 catalog.xml 的程序(Dom4Jparser.java)    

        365. import org.dom4j.Document;   

        366. import org.dom4j.Element;   

        367. import org.dom4j.Attribute;   

        368. import java.util.List;   

        369. import java.util.Iterator;   

        370. import org.dom4j.io.XMLWriter;   

        371. import java.io.*;   

        372. import org.dom4j.DocumentException;   

        373. import org.dom4j.io.SAXReader;    

        374. public class Dom4JParser{   

        375.  public void modifyDocument(File inputXml){   

        376.   try{   

        377.    SAXReader saxReader = new SAXReader();   

        378.    Document document = saxReader.read(inputXml);   

        379.    List list = document.selectNodes(“//article/@level” );   

        380.    Iterator iter=list.iterator();   

        381.    while(iter.hasNext()){   

        382.     Attribute attribute=(Attribute)iter.next();   

        383.     if(attribute.getValue().equals(“Intermediate”))   

        384.       attribute.setValue(“Introductory”);    

        385.        }   

        386.       

        387.    list = document.selectNodes(“//article/@date” );   

        388.    iter=list.iterator();   

        389.    while(iter.hasNext()){   

        390.     Attribute attribute=(Attribute)iter.next();   

        391.     if(attribute.getValue().equals(“December-2001”))   

        392.       attribute.setValue(“October-2002”);   

        393.        }   

        394.    list = document.selectNodes(“//article” );   

        395.    iter=list.iterator();   

        396.    while(iter.hasNext()){   

        397.     Element element=(Element)iter.next();   

        398.     Iterator iterator=element.elementIterator(“title”);   

        399.       while(iterator.hasNext()){   

        400.         Element titleElement=(Element)iterator.next();   

        401.         if(titleElement.getText().equals(“Java configuration with XML   

        402.       Schema”))   

        403.         titleElement.setText(“Create flexible and extensible XML schema”);   

        404.                                           }   

        405.                                 }   

        406.     list = document.selectNodes(“//article/author” );   

        407.     iter=list.iterator();   

        408.      while(iter.hasNext()){   

        409.      Element element=(Element)iter.next();   

        410.      Iterator iterator=element.elementIterator(“firstname”);   

        411.      while(iterator.hasNext()){   

        412.       Element firstNameElement=(Element)iterator.next();   

        413.       if(firstNameElement.getText().equals(“Marcello”))   

        414.       firstNameElement.setText(“Ayesha”);   

        415.                                      }   

        416.                               }   

        417.     list = document.selectNodes(“//article/author” );   

        418.     iter=list.iterator();   

        419.      while(iter.hasNext()){   

        420.       Element element=(Element)iter.next();   

        421.       Iterator iterator=element.elementIterator(“lastname”);   

        422.      while(iterator.hasNext()){   

        423.       Element lastNameElement=(Element)iterator.next();   

        424.       if(lastNameElement.getText().equals(“Vitaletti”))   

        425.       lastNameElement.setText(“Malik”);   

        426.                                   }   

        427.                                }   

        428.      XMLWriter output = new XMLWriter(   

        429.       new FileWriter( new File(“c:/catalog/catalog-modified.xml”) ));   

        430.      output.write( document );   

        431.      output.close();   

        432.    }   

        433.     

        434.   catch(DocumentException e)   

        435.                  {   

        436.                   System.out.println(e.getMessage());   

        437.                             }   

        438.   catch(IOException e){   

        439.                        System.out.println(e.getMessage());   

        440.                     }   

        441.  }   

        442.  public static void main(String[] argv){   

        443.   Dom4JParser dom4jParser=new Dom4JParser();   

        444.   dom4jParser.modifyDocument(new File(“c:/catalog/catalog.xml”));   

        445.                                         }   

        446.    }   

        447.    

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 国产精品v欧美精品v日韩精品| 精品欧美一区二区三区久久久| 99爱在线视频这里只有精品| 国产最新进精品视频| 亚洲欧美精品综合中文字幕| 亚洲国产精品第一区二区三区| 在线观看自拍少妇精品| 四虎国产精品免费久久久| 国产精品视频不卡| 欧美精品黑人粗大| 久久精品国产亚洲欧美| 国产成人精品cao在线| 国产精品.XX视频.XXTV| 国内精品久久久久久久coent| 欧美成人精品高清在线播放| 老司机91精品网站在线观看| 日本伊人精品一区二区三区| 国产精品日韩欧美一区二区三区| 国产在线精品网址你懂的| 国产精品日韩欧美久久综合| 国产精品jizz视频| 无码人妻精品一区二区三区久久 | 久久这里只有精品视频99| 亚洲精品一级无码中文字幕| 国产精品白丝jkav网站| 国内精品久久久久久野外| 精品人妻无码一区二区色欲产成人 | 久久99国内精品自在现线| 精品九九久久国内精品| 国产精品区一区二区三在线播放| 中文字幕久精品免费视频| 国产精品视频第一页| 国产精品日韩欧美一区二区三区| 亚洲精品午夜无码专区| 国产成人亚洲精品| 欧美日韩精品在线观看| 国产精品主播一区二区| 国产精品午夜无码AV天美传媒| 国产精品久久久久一区二区三区| 欧美精品免费在线| 四虎国产精品免费久久5151|