java學習:使用dom4j讀寫xml檔案

來源:互聯網
上載者:User

dom4j是一個優秀的開源項目,專用於xml檔案的讀寫,而且支援強大的xpath.

下面的代碼示範了對xml檔案demo.xml的讀寫

demo.xml內容:

<?xml version="1.0" encoding="UTF-8" ?><address-list>  <card name="yangjm" id="1">    <sex>男</sex>    <address><![CDATA[中國上海外灘No.01]]>    </address>    <telephone>13916732212</telephone>  </card>  <card name="zhangsan" id="2">    <sex>女</sex>    <address>      <item type="家庭地址"><![CDATA[中國.北京.東直門外大街]]>      </item>      <item type="單位地址"><![CDATA[中國.上海.田林路888號]]>      </item>    </address>    <telephone>010-123123</telephone>  </card></address-list>

 

java代碼:

package jmyang.dom4j;/** * <p>Title:dom4j測試 </p> * <p>Description: 使用xpath讀取節點內容、屬性</p> * <p>Copyright: Copyright (c) 2012</p> * <p>Company: infosky.com.cn</p> * @author:yjmyzz@126.com 菩提樹下的楊過 * @version 1.0 */import java.util.*;import java.io.*;import org.dom4j.*;import org.dom4j.io.*;public class XmlTest {    public static void Test() {        String fileName = System.getProperty("user.dir") + "\\demo.xml"; //當前路徑下的demo.xml        try {            SAXReader reader = new SAXReader();            Document doc = reader.read(fileName); //載入xml檔案            List peoples = doc.selectNodes("//*[@name]"); //選擇所有具有name屬性的節點(即demo.xml中的所有card節點)            for (Iterator iter = peoples.iterator(); iter.hasNext(); ) {                Element card = (Element) iter.next();                //System.out.println(node.asXML());                //System.out.println("---------------------------------------");                //System.out.println(node.attributeCount());                List attrList = card.attributes();                //輸出每個card的所有屬性                for (Iterator attr = attrList.iterator(); attr.hasNext(); ) {                    Attribute a = (Attribute) attr.next();                    System.out.println(a.getName() + "=" + a.getValue());                }                System.out.println(                        "----------------------------------------------------");            }            Element zhangsan = (Element) doc.selectSingleNode("//card[@id='2']"); //尋找“id屬性”=2的card元素            System.out.println("張三的名稱:" + zhangsan.attribute("name").getValue()); //輸出zhangsan的name屬性            Node addrFamily = zhangsan.selectSingleNode("./address/item[2]"); //選擇zhangsan元素下的address節點下的第2個item子節點            System.out.println("張三的單位地址:" + addrFamily.getStringValue()); //輸出cdata內容            System.out.println(                    "----------------------------------------------------");            //為zhangsan下增加二個節點            zhangsan.addElement("email").addAttribute("type",                    "工作").addText("work@some-domain.com");            zhangsan.addElement("email").addAttribute("type",                    "私人").addCDATA("private@some-domain.com"); //設定CDATA內容            System.out.println(zhangsan.asXML()); //列印zhangsan節點的xml內容(調試用)            System.out.println(                    "----------------------------------------------------");            //將上述改動儲存到檔案demo2.xml            FileWriter fileWriter = new FileWriter(System.getProperty(                    "user.dir") + "\\demo2.xml");            OutputFormat format = OutputFormat.createPrettyPrint(); //設定美觀的縮排格式,便於閱讀            //format = OutputFormat.createCompactFormat();//設定緊湊格式(消除多餘空格),便於下載            XMLWriter writer = new XMLWriter(System.out, format);            writer.setWriter(fileWriter);            writer.write(doc);            writer.close();        } catch (Exception e) {            e.printStackTrace();        }    }}

 jBuilder下的運行結果:

name=yangjm
id=1
----------------------------------------------------
name=zhangsan
id=2
----------------------------------------------------
張三的名稱:zhangsan
張三的單位地址:中國.上海.田林路888號     
----------------------------------------------------
<card name="zhangsan" id="2">
    <sex>女</sex>
    <address>
      <item type="家庭地址"><![CDATA[中國.北京.東直門外大街]]>      </item>
      <item type="單位地址"><![CDATA[中國.上海.田林路888號]]>      </item>
    </address>
    <telephone>010-123123</telephone>
  <email type="工作">work@some-domain.com</email><email type="私人"><![CDATA[private@some-domain.com]]></email></card>
----------------------------------------------------

儲存後的demo2.xml

<?xml version="1.0" encoding="UTF-8"?>

<address-list>
  <card name="yangjm" id="1">
    <sex>男</sex> 
    <address><![CDATA[中國上海外灘No.01]]> </address> 
    <telephone>13916732212</telephone>
  </card> 
  <card name="zhangsan" id="2">
    <sex>女</sex> 
    <address>
      <item type="家庭地址"><![CDATA[中國.北京.東直門外大街]]> </item> 
      <item type="單位地址"><![CDATA[中國.上海.田林路888號]]> </item>
    </address> 
    <telephone>010-123123</telephone>  
    <email type="工作">work@some-domain.com</email>
    <email type="私人"><![CDATA[private@some-domain.com]]></email>
  </card>
</address-list>

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.