1. 程式人生 > >Dom4j解析和生成XML文件

Dom4j解析和生成XML文件

一、前言

    dom4j是一套非常優秀的java開源api,主要用於讀寫xml文件,具有效能優異、功能強大、和非常方便使用的特點。   另外xml經常用於資料交換的載體,像呼叫webservice傳遞的引數,以及資料做同步操作等等,   所以使用dom4j解析xml是非常有必要的。

二、準備條件

   dom4j.jar

三、使用Dom4j實戰

1、解析xml文件

實現思路:

   <1>根據讀取的xml路徑,傳遞給SAXReader之後 返回一個Document文件物件;

   <2>然後操作這個Document物件,獲取下面的節點以及子節點的資訊;

具體程式碼如下:

[java] view plain copy  print?
  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.InputStream;  
  4. import java.util.Iterator;  
  5. import java.util.List;  
  6. import org.dom4j.Document;  
  7. import org.dom4j.DocumentHelper;  
  8. import org.dom4j.Element;  
  9. import org.dom4j.io.SAXReader;  
  10. /** 
  11.  * 使用dom4j解析xml文件 
  12.  * @author Administrator 
  13.  * 
  14.  */
  15. publicclass Dom4jParseXmlDemo {  
  16.     publicvoid parseXml01(){  
  17.         try{  
  18.             //將src下面的xml轉換為輸入流
  19.             InputStream inputStream = new FileInputStream(new File("D:/project/dynamicWeb/src/resource/module01.xml"
    ));   
  20.             //InputStream inputStream = this.getClass().getResourceAsStream("/module01.xml");//也可以根據類的編譯檔案相對路徑去找xml
  21.             //建立SAXReader讀取器,專門用於讀取xml
  22.             SAXReader saxReader = new SAXReader();  
  23.             //根據saxReader的read重寫方法可知,既可以通過inputStream輸入流來讀取,也可以通過file物件來讀取 
  24.             //Document document = saxReader.read(inputStream);  
  25.             Document document = saxReader.read(new File("D:/project/dynamicWeb/src/resource/module01.xml"));//必須指定檔案的絕對路徑
  26.             //另外還可以使用DocumentHelper提供的xml轉換器也是可以的。
  27.             //Document document = DocumentHelper.parseText("<?xml version=\"1.0\" encoding=\"UTF-8\"?><modules id=\"123\"><module> 這個是module標籤的文字資訊</module></modules>");
  28.             //獲取根節點物件
  29.             Element rootElement = document.getRootElement();    
  30.             System.out.println("根節點名稱:" + rootElement.getName());//獲取節點的名稱
  31.             System.out.println("根節點有多少屬性:" + rootElement.attributeCount());//獲取節點屬性數目
  32.             System.out.println("根節點id屬性的值:" + rootElement.attributeValue("id"));//獲取節點的屬性id的值
  33.             System.out.println("根節點內文字:" + rootElement.getText());//如果元素有子節點則返回空字串,否則返回節點內的文字
  34.             //rootElement.getText() 之所以會換行是因為 標籤與標籤之間使用了tab鍵和換行符佈局,這個也算是文字所以顯示出來換行的效果。
  35.             System.out.println("根節點內文字(1):" + rootElement.getTextTrim());//去掉的是標籤與標籤之間的tab鍵和換行符等等,不是內容前後的空格
  36.             System.out.println("根節點子節點文字內容:" + rootElement.getStringValue()); //返回當前節點遞迴所有子節點的文字資訊。
  37.             //獲取子節點
  38.             Element element = rootElement.element("module");  
  39.             if(element != null){  
  40.                 System.out.println("子節點的文字:" + element.getText());//因為子節點和根節點都是Element物件所以它們的操作方式都是相同的
  41.             }  
  42.             //但是有些情況xml比較複雜,規範不統一,某個節點不存在直接java.lang.NullPointerException,所以獲取到element物件之後要先判斷一下是否為空
  43.             rootElement.setName("root");//支援修改節點名稱
  44.             System.out.println("根節點修改之後的名稱:" + rootElement.getName());  
  45.             rootElement.setText("text"); //同樣修改標籤內的文字也一樣
  46.             System.out.println("根節點修改之後的文字:" + rootElement.getText());  
  47.         } catch (Exception e) {    
  48.             e.printStackTrace();    
  49.         }    
  50.     }  
  51.     publicstaticvoid main(String[] args) {  
  52.         Dom4jParseXmlDemo demo = new Dom4jParseXmlDemo();  
  53.         demo.parseXml01();  
  54.     }  
  55. }  
另外上面的xml在src下面,module01.xml具體如下: [html] view plain copy  print?
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <modulesid="123">
  3.     <module> 這個是module標籤的文字資訊</module>
  4. </modules>
接下來執行該類的main方法,console效果如下:

由此以知: 

   <1>dom4j讀取xml檔案方式有很多樣;

   <2>取出element物件的文字和標籤名稱都非常簡單;

   <3>並且修改元素的文字和標籤名稱都非常方便,但是不會寫入到磁碟xml檔案中。

上面只是簡單的獲取了xml的根目錄的元素,接下來使用Iterator 迭代器迴圈document文件物件。

具體程式碼如下:

[java] view plain copy  print?
  1. publicvoid parseXml02(){  
  2.     try{  
  3.         //將src下面的xml轉換為輸入流
  4.         InputStream inputStream = this.getClass().getResourceAsStream("/module02.xml");  
  5.         //建立SAXReader讀取器,專門用於讀取xml
  6.            SAXReader saxReader = new SAXReader();  
  7.            //根據saxReader的read重寫方法可知,既可以通過inputStream輸入流來讀取,也可以通過file物件來讀取
  8.            Document document = saxReader.read(inputStream);  
  9.            Element rootElement = document.getRootElement();  
  10.         Iterator<Element> modulesIterator = rootElement.elements("module").iterator();  
  11.         //rootElement.element("name");獲取某一個子元素
  12.         //rootElement.elements("name");獲取根節點下子元素moudule節點的集合,返回List集合型別
  13.         //rootElement.elements("module").iterator();把返回的list集合裡面每一個元素迭代子節點,全部返回到一個Iterator集合中
  14.         while(modulesIterator.hasNext()){  
  15.             Element moduleElement = modulesIterator.next();  
  16.             Element nameElement = moduleElement.element("name");  
  17.             System.out.println(nameElement.getName() + ":" + nameElement.getText());  
  18.             Element valueElement = moduleElement.element("value");  
  19.             System.out.println(valueElement.getName() + ":" + valueElement.getText());  
  20.             Element descriptElement = moduleElement.element("descript");  
  21.             System.out.println(descriptElement.getName() + ":" + descriptElement.getText());  
  22.         }     
  23.     } catch (Exception e) {    
  24. 相關推薦

    Dom4j解析生成XML

    一、前言     dom4j是一套非常優秀的java開源api,主要用於讀寫xml文件,具有效能優異、功能強大、和非常方便使用的特點。   另外xml經常用於資料交換的載體,像呼叫webservice傳遞的引數,以及資料做同步操作等等,   所以使用dom4

    dom4j解析生成XML

    document xml dom4j 解析XML的兩種方法package cnslp.dom4j.com; import java.io.File; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.D

    Dom解析生成XML

    一、前言     Dom即檔案物件模型(Document Object Model),是W3C組織推薦的使用可擴充套件標記性語言的標準介面, 它主要用於讀寫xml文件,使用起來還是非常不錯的。  另外Dom將整個xml檔案對映成一個有層次的節點的結構,分別1級、2級到多級

    Xmldom4j解析以及寫入xml時的亂碼問題

    book.xml <?xml version="1.0" encoding="UTF-8"?> <書架>   <書>     <書名>Java就業基礎教程</書名>      <作者>張孝祥</作者

    Java之dom4j的簡單解析生成xml的應用

    util 讀寫 pro artifact gettext depend bject sta rgs   一、dom4j是一個Java的XML API,是jdom的升級品,用來讀寫XML文件的。dom4j是一個十分優秀的JavaXML API,具有性能優異、功能強大和極其易使

    安卓使用StringBufferFileOutputStream生成xml

    該程式是在安卓中點選生成xml按鈕,在sdcard生成一個名為smsbackup的xml文件 佈局就不多說了,先在存放java的資料夾中新建一個Sms類用來宣告變數 Sms程式碼如下: package com.example.createxmlv1; public class Sm

    dom4j生成xml

    format doc bsp xml文件 out ted 通過 package orm 1 package xml; 2 3 import java.io.FileWriter; 4 import java.io.IOException; 5 import ja

    Java解析XML生成XML

    mysq for 二進制 根據 port des void pub pack XML是eXtensible Markup Language(可擴展標記語言)的簡寫形式,它是一種元標記語言(meta-markup language),也就是說它沒有一套能夠適用於各個領域中所

    java 生成 xml

    new output org enc class 註意 created ear str   解析會了,那接著來學學生成~   同樣的引入依賴: import java.io.File; import java.io.FileOutputStream; import or

    使用多個項目生成Xml來顯示幫助

    spa 的人 ber this blog -i 項目 對比 方便 終於到這了,我們首先將Product單獨作為一個項目 WebAPI2PostMan.WebModel 並引用他,查看文檔如下。 你會發現,你的註釋也就是屬性的描述沒有了。打開App_Data/XmlDocu

    android 中生成xml

    android 寫xml文件 在Android中生成xml文件真的很簡單,下面提供2中方法,一種是通過String寫入到文件,另外一種是通過XML 的 XmlSerializer.以後遇到Android寫xml內容就不會困惑了1、通過string寫入文件 String name=mEtName.

    Mybatis自動生成Xml,針對字段類型為text等會默認產生XXXXWithBlobs的方法問題

    div 生成xml文件 處理 pre cnblogs href 字段 默認 mybatis 默認情況下產生的Mapper.xml裏面存在: 需要修改generatorConfiguration.xml,裏面的table加屬性,如: <t

    省廳報7.0 讀取mdb 生成xml

    tel long {0} datetime fda string console .get exceptio using System;using System.Collections.Generic;using System.Data;using System.Data.

    Android studio中gradle配置打jar包生成Javadoc

    Android studio 中生成Javadoc 使用Android studio提供的生成Javadoc的方法(之前沒有想要使用這種方式的原因是因為當時以為使用這種方式的話每次生成都需要選擇想要生成的java檔案, 過於麻煩), 最後發現, 使用這種方式只有配置過一次規則之後, 這個規則

    對訊息 的正文進行序列化時出錯:“生成 XML 時出錯。”

    c# 執行儲存過程時報錯:對訊息  的正文進行序列化時出錯:“生成 XML 文件時出錯。” 原因是在執行儲存過程時傳遞的裡面包含有表,但是我沒有給表命名。 解決方法是給宣告的表命名: DataTable I_AnnexTable = GetI_AnnexTable();

    PBDOM 解析生成XML

    1. PBDOM設定 1)新增pbdom120.pbd(%SYBASE%/Shared/PowerBuilder)到工程的pbl列表中 2) %SYBASE%/Shared/PowerBuilder應該在系統路徑或者應用程式的路徑中(也就是pbdom要使用此路徑下的pbdom

    對訊息 的正文進行序列化時出錯:“生成 XML 時出錯。”

    c# 執行儲存過程時報錯:對訊息  的正文進行序列化時出錯:“生成 XML 文件時出錯。” 原因是在執行儲存過程時傳遞的裡面包含有表,但是我沒有給表命名。 解決方法是給宣告的表命名: DataTable I_AnnexTable = GetI_AnnexTable()

    XML解析】(1)Java下使用JAXP中的DOM解析方式對XML進行解析

    關於JAXP、DOM、SAX: 何為JAXP? JAXP(JavaApi for Xml Programming) – sun公司的一套操作XML的API。 JAXP中分為三種解析方式: DOM解析、SAX解析、StAX

    dom解析方式對xml進行操作

    <span style="font-size:14px;"><?xml version="1.0" encoding="utf-8" standalone="no"?><書架> <書> <

    maven中使用dom4j解析生成XML的簡易方法

    此片文章主要寫一些關於如何在maven工程中使用dom4j來解析或生成XML的建議方法,實際可使用的寫法不僅限於如下所寫的樣例程式碼。此處進攻快速入手和提供思路使用。 首先配置pom.xml中的依賴的包 <dependencies> &