日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

XML文件的写入和读取(解析)基于DOM4J工具

發(fā)布時間:2025/3/11 asp.net 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XML文件的写入和读取(解析)基于DOM4J工具 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這兩天做了個天氣的小應(yīng)用,需要用到百度的天氣api,獲取到的信息是一個xml文檔。

所以就從網(wǎng)上查了一下相關(guān)的知識,就是關(guān)于怎么去解析出來xml文件的信息。

先放一個我自己寫的例子,加了點注釋,貼這里吧。

package cn.yzy.test;import java.util.List;import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.util.Iterator;import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter;public class MyTest {/*** DOM4J讀寫XML示例*/public static void main(String[] args) {// 用變量保存一下xml文件的路徑String path = "d:\\temp\\student.xml";// 創(chuàng)建xml的方法createXML(path);// 讀取xml文件的方法readXML(path);// 把xml文件讀取成StringString xml = readFile(path);// 輸出一下xmlSystem.out.println(xml);// 把String的xml解析出來readXMLStr(xml);}/*** readFile 讀取文件到String* * @param path* @return*/public static String readFile(String path) {String txt = "";try {// 讀取文件File file = new File(path);// 創(chuàng)建輸入流InputStreamReader isReader = new InputStreamReader(new FileInputStream(file), "utf-8");// 緩沖區(qū)BufferedReader bf = new BufferedReader(isReader);// 循環(huán)把文本讀取出來String lineTxt = null;while ((lineTxt = bf.readLine()) != null) {txt += lineTxt;}} catch (Exception e) {e.printStackTrace();}// 最后把文本字符串返回return txt;}/*** createXML 創(chuàng)建XML到指定目錄* * @param path*/public static void createXML(String path) {// 讀取文件,檢查文件是否存在,存在就不創(chuàng)建文件了。File file = new File(path);if (!file.exists()) {try {// 創(chuàng)建xml文檔,用DocumentHelperDocument dc = DocumentHelper.createDocument();// 在文檔里要加入元素節(jié)點// 添加 根節(jié)點 -> 學生信息Element root = dc.addElement("學生信息");// 在 學生信息節(jié)點 中 加入 學生Element stu1 = root.addElement("學生");// 可以設(shè)置屬性,設(shè)置學生 sid 屬性為 001stu1.addAttribute("sid", "001");// 在學生里面加入子元素,鍵值對應(yīng)Element name1 = stu1.addElement("姓名");name1.setText("張三");Element sex1 = stu1.addElement("性別");sex1.setText("男");Element stu2 = root.addElement("學生");stu2.addAttribute("sid", "002");Element name2 = stu2.addElement("姓名");name2.setText("小紅");Element sex2 = stu2.addElement("性別");sex2.setText("女");// xml文檔生成,準備寫入文件,文件路徑和格式設(shè)置好。// 輸出格式以及編碼設(shè)置OutputFormat format = new OutputFormat("\n", true);format.setEncoding("utf-8");// 聲明一個寫文件的類XMLWriter writer = new XMLWriter(new FileOutputStream(path),format);// 寫文件,完成后關(guān)閉writer.write(dc);writer.close();System.out.println("操作成功");} catch (IOException e) {e.printStackTrace();}} else {System.out.println("文件已存在");}}/*** readXML 讀取XML,從指定文件路徑* * @param path*/public static void readXML(String path) {try {// 輸出文件是否存在System.out.println(new File(path).exists());// 新建一個讀取xml文檔的對象SAXReader reader = new SAXReader();// 將文件讀入DocumentDocument dc = reader.read(path);System.out.println(dc.toString());// 讀取根節(jié)點Element root = dc.getRootElement();// 遍歷根節(jié)點下,所有子節(jié)點(僅能訪問到一層)List nodes = root.elements();for (Iterator it = nodes.iterator(); it.hasNext();) {Element ele = (Element) it.next();System.out.println(ele.getName() + ele.attributeValue("sid"));System.out.println(ele.elementText("姓名"));System.out.println(ele.elementText("性別"));}} catch (DocumentException e) {e.printStackTrace();}System.out.println("--- --- End --- ---");}/*** readXMLStr 從String中讀取XML信息* * @param xml*/public static void readXMLStr(String xml) {try {System.out.println("--- --- readXMLStr --- ---");// 同樣是創(chuàng)建讀取xml的類,但是讀取方法參數(shù)改為:new StringReader(xml) 從字符串讀取SAXReader reader = new SAXReader();Document dc = reader.read(new StringReader(xml));System.out.println(dc.toString());Element root = dc.getRootElement();List nodes = root.elements();for (Iterator it = nodes.iterator(); it.hasNext();) {Element ele = (Element) it.next();System.out.println(ele.getName() + ele.attributeValue("sid"));System.out.println(ele.elementText("姓名"));System.out.println(ele.elementText("性別"));}} catch (DocumentException e) {e.printStackTrace();}System.out.println("--- --- End --- ---");} }


以下是我從其他一個博客里參考的一些資料,深受啟發(fā):


網(wǎng)址:

http://www.blogjava.net/biiau/archive/2008/09/24/231005.html


部分DOM4J的解釋


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


1.讀取XML文件,獲得document對象.
? ? ? ?SAXReader reader = new SAXReader();
? ? ? Document ? document = reader.read(new File("input.xml"));


2.解析XML形式的文本,得到document對象.
? ? ? String text = "<members></members>";
? ? ? Document document = DocumentHelper.parseText(text);


3.主動創(chuàng)建document對象.
? ? ? ?Document document = DocumentHelper.createDocument();
? ? ? Element root = document.addElement("members");// 創(chuàng)建根節(jié)點


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


1.獲取文檔的根節(jié)點.
? ? ? Element rootElm = document.getRootElement();


2.取得某節(jié)點的單個子節(jié)點.
? ? ?Element memberElm=root.element("member");// "member"是節(jié)點名


3.取得節(jié)點的文字
? ? ?String text=memberElm.getText();
也可以用:
? ? ?String text=root.elementText("name");
這個是取得根節(jié)點下的name字節(jié)點的文字.


4.取得某節(jié)點下名為"member"的所有字節(jié)點并進行遍歷.
List nodes = rootElm.elements("member");


for (Iterator it = nodes.iterator(); it.hasNext();) {
? ? Element elm = (Element) it.next();
? ?// do something
}


5.對某節(jié)點下的所有子節(jié)點進行遍歷.
?for(Iterator it=root.elementIterator();it.hasNext();){
? ? ? ? ? ? ? ? ?Element element = (Element) it.next();
? ? ? ? ? ? ? ? // do something
? ? ? ? ? ? ?}


6.在某節(jié)點下添加子節(jié)點.
Element ageElm = newMemberElm.addElement("age");


7.設(shè)置節(jié)點文字.
ageElm.setText("29");


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


9.添加一個CDATA節(jié)點.
? ? ? ? ? Element contentElm = infoElm.addElement("content");
? ? ? ? ?contentElm.addCDATA(diary.getContent());


? ? ? ? ? ? contentElm.getText(); // 特別說明:獲取節(jié)點的CDATA值與獲取節(jié)點的值是一個方法
? ? ? ? ? ? contentElm.clearContent(); //清除節(jié)點中的內(nèi)容,CDATA亦可




三.屬性相關(guān).
1.取得某節(jié)點下的某屬性
? ? ? ? ? ? ?Element root=document.getRootElement(); ? ?
? ? ? ? ? ? ?Attribute attribute=root.attribute("size");// 屬性名name


2.取得屬性的文字
? ? ? ? ? ? ?String text=attribute.getText();
也可以用:
String text2=root.element("name").attributeValue("firstname");
這個是取得根節(jié)點下name字節(jié)點的屬性firstname的值.


3.遍歷某節(jié)點的所有屬性
? Element root=document.getRootElement(); ? ?
? ? ? ? ? ? for(Iterator it=root.attributeIterator();it.hasNext();){
? ? ? ? ? ? ? ? ?Attribute attribute = (Attribute) it.next();
? ? ? ? ? ? ? ? ?String text=attribute.getText();
? ? ? ? ? ? ? ? ?System.out.println(text);
? ? ? ? ? ? ?}


4.設(shè)置某節(jié)點的屬性和文字.
newMemberElm.addAttribute("name", "sitinspring");


5.設(shè)置屬性的文字
? ? ? ? ? ? ?Attribute attribute=root.attribute("name");
? ? ? ? ? ? ?attribute.setText("sitinspring");


6.刪除某屬性
? ? ? ? ? ? ? Attribute attribute=root.attribute("size");// 屬性名name
? ? ? ? ? ? ?root.remove(attribute);


四.將文檔寫入XML文件.
1.文檔中全為英文,不設(shè)置編碼,直接寫入的形式.
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();


2.文檔中含有中文,設(shè)置編碼格式寫入的形式.
? ? ? ? ? ? ? OutputFormat format = OutputFormat.createPrettyPrint();
? ? ? ? ? ? ?format.setEncoding("GBK"); ? ?// 指定XML編碼 ? ? ? ?
? ? ? ? ? ? ?XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
? ? ? ? ? ??
? ? ? ? ? ? ?writer.write(document);
? ? ? ? ? ? ?writer.close();


五.字符串與XML的轉(zhuǎn)換
1.將字符串轉(zhuǎn)化為XML
String text = "<members> <member>sitinspring</member> </members>";
Document document = DocumentHelper.parseText(text);


2.將文檔或節(jié)點的XML轉(zhuǎn)化為字符串.
? ? ? ? ? ? ?SAXReader reader = new SAXReader();
? ? ? ? ? ? ?Document ? document = reader.read(new File("input.xml")); ? ? ? ? ? ?
? ? ? ? ? ? ?Element root=document.getRootElement(); ? ? ? ? ? ? ? ?
? ? ? ? ? ? ?String docXmlText=document.asXML();
? ? ? ? ? ? ?String rootXmlText=root.asXML();
? ? ? ? ? ? ?Element memberElm=root.element("member");
? ? ? ? ? ? ?String memberXmlText=memberElm.asXML();


總結(jié)

以上是生活随笔為你收集整理的XML文件的写入和读取(解析)基于DOM4J工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。