Dom4j操作XML
dom4j幫助文檔在dom4j-1.6.1/docs/guide.html文件里面,全部是英文,但是基本上應(yīng)該能看懂。
?
1、? 四種操作xml的方式:SAX,DOM,JDOM,DOM4J.
2、? DOM(Document Object Model):意思是把整個(gè)xml做為一個(gè)整體對(duì)象,直接全部放到內(nèi)存里面,不管xml文件有多大;
3、? SAX=Sample API for XML:假如xml文件有2G,用第一種方式,是很困難的,SAX用的是一種類似流媒體方式進(jìn)行的。
DOM和SAX是Java的API,處理xml文件的時(shí)候,相對(duì)來說是比較困難的,于是出現(xiàn)了下面兩種框架,包裝了上面兩個(gè)框架。
4、? JDOM:
5、? DOM4J:
6、? 利用DOM4J解析xml文件(讀取所有的屬性節(jié)點(diǎn))。
Document可以理解為整個(gè)文檔對(duì)象
取root節(jié)點(diǎn)。Document.getRootElement()返回的是一個(gè)Element(元素)
7、? 理解運(yùn)用xpath,path就是路徑,xpath在xml文件里面找到特定的節(jié)點(diǎn)。
Document.selectNodes(“//hibernate-mapping/class/property”) ?//其中hibenate-mapping是根節(jié)點(diǎn)。做變org.dom4j.Node對(duì)象返回的。
Document.selectSingleNodes(“//hibernate-mapping/class/property”)//只拿第一個(gè)。
基中@name是property的屬性名valueOf是拿出name的值;
需要加入DOM4J里面的jaxen包
8、? DOM4J的生成xml文件
9、? 用FileWriter生成xml文件的時(shí)候,可能沒有格式,可以用XMLWriter類,這樣自動(dòng)進(jìn)行美化。
10、 ?DOM4J修改xml文件;很少用。
11、 ?自動(dòng)生成代碼往往用的是:freemarker或velocity,這是常用的。用dom4j生成也很少用。
12、 ?怎么用表里面的結(jié)構(gòu)生成xml文件。
13、 JavaDB
a) ? ? ? Properties對(duì)象:可以理解為一個(gè)表格對(duì)應(yīng)key,value
14、 ?Databasemetadata,可以能過這個(gè)JDK類,讀取數(shù)據(jù)庫的表結(jié)構(gòu),通過這個(gè)表結(jié)構(gòu)做一些自己的事情。(熟悉用法)通過JDK文檔和google學(xué)習(xí)
15、 ? 元數(shù)據(jù)就是數(shù)據(jù)的數(shù)據(jù),用來描述數(shù)據(jù)的數(shù)據(jù)。
16、 ? DWR,對(duì)Ajax框架封住得比較好,是類和java的結(jié)合。
<?xml version="1.0" encoding="UTF-8"?> <node> <book> <title>JAVA編程思想</title> <author>XX</author> <price>12.5</price> </book> <book bookid="isbsb-111"> <title>Effective Java</title> <author>Jack</author> <price>22.5</price> <批發(fā)價(jià)>18</批發(fā)價(jià)> </book> </node>demo:
package com.itheima.dom4j.test;import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.junit.Test;import com.itheima.utils.Dom4jUtil;/** 1、得到某個(gè)具體的節(jié)點(diǎn)內(nèi)容 2、遍歷所有元素節(jié)點(diǎn) 3、修改某個(gè)元素節(jié)點(diǎn)的主體內(nèi)容 4、向指定元素節(jié)點(diǎn)中增加子元素節(jié)點(diǎn) 5、向指定元素節(jié)點(diǎn)上增加同級(jí)元素節(jié)點(diǎn) 6、刪除指定元素節(jié)點(diǎn) 7、操作XML文件屬性Element root =document.getRootElement();//得到根結(jié)點(diǎn) root.nodeCount();//根結(jié)點(diǎn)下,子結(jié)點(diǎn)個(gè)數(shù) ele.node(i);//第i個(gè)結(jié)點(diǎn) authorEle.getText();取結(jié)點(diǎn)的文本 elements("書");所有的書結(jié)點(diǎn) element("作者");得到一個(gè)作者*/ public class Dom4jTest {// 1、得到某個(gè)具體的節(jié)點(diǎn)內(nèi)容 在第二本書的作者 @Testpublic void test1(){try {//1.得到Document對(duì)象Document document = Dom4jUtil.getDocument();//2.得到根結(jié)點(diǎn)//Element root = document.getRootElement();//3.找第二本書//Element node = (Element)root.elements("書").get(1);//4再找第二本書的作者//Element authorEle = node.element("作者");//----------xpath--------------Node authorEle = document.selectSingleNode("//書[2]/作者");//5.讀取文本 System.out.println(authorEle.getText());} catch (Exception e) {e.printStackTrace();}}//2、遍歷所有元素節(jié)點(diǎn) @Testpublic void test2(){try {//1.得到Document對(duì)象Document document = Dom4jUtil.getDocument();//2.得到根結(jié)點(diǎn)Element root = document.getRootElement();//3.調(diào)用 treeWalk(root);} catch (Exception e) {e.printStackTrace();}}public void treeWalk(Element ele){System.out.println(ele.getName());for(int i=0;i<ele.nodeCount();i++){Node node = ele.node(i);//第i個(gè)結(jié)點(diǎn)if(node instanceof Element){treeWalk((Element)node);}}}//3、修改某個(gè)元素節(jié)點(diǎn)的主體內(nèi)容 第一本書的作者改為于磊 @Testpublic void test3(){try {//1.得到Document對(duì)象Document document = Dom4jUtil.getDocument();//2.得到根結(jié)點(diǎn)//Element root = document.getRootElement();//Element bookEle = root.element("書");//找到第一本書//3.找到第一本書的作者//Element authorEle = bookEle.element("作者");//authorEle.setText("于磊");//----------------xpath------------------------Node node = document.selectSingleNode("/書架/書[1]/作者");node.setText("于總");//4.寫回XML Dom4jUtil.writeDocument2Xml(document);} catch (Exception e) {e.printStackTrace();}}//4、向指定元素節(jié)點(diǎn)中增加子元素節(jié)點(diǎn) 在第二本書的子結(jié)點(diǎn)中添加一個(gè)批發(fā)價(jià) @Testpublic void test4(){try {//1.得到Document對(duì)象Document document = Dom4jUtil.getDocument();//2.得到根結(jié)點(diǎn)//Element root = document.getRootElement();//3.找到第二本書//Element bookEle = (Element)root.elements().get(1);//bookEle.addElement("批發(fā)價(jià)").setText("80");//-------------xpath---------------------------Element node = (Element)document.selectSingleNode("/書架/書[2]");node.addElement("批發(fā)價(jià)").setText("80");//4.寫回XML Dom4jUtil.writeDocument2Xml(document);} catch (Exception e) {e.printStackTrace();}}//5、向指定元素節(jié)點(diǎn)上增加同級(jí)元素節(jié)點(diǎn) 在第一本書的售價(jià)前面,添加一個(gè)內(nèi)部價(jià) @Testpublic void test5(){try {//1.得到Document對(duì)象Document document = Dom4jUtil.getDocument();//2.得到根結(jié)點(diǎn)Element root = document.getRootElement();Element bookEle = root.element("書");//Element priceEle = bookEle.element("售價(jià)");//通過DocumentHelper類提供的createElement()創(chuàng)建一個(gè)結(jié)點(diǎn)Element innerPriceNode = DocumentHelper.createElement("內(nèi)部價(jià)");innerPriceNode.setText("200");bookEle.elements().add(2, innerPriceNode);//4.寫回XML Dom4jUtil.writeDocument2Xml(document);} catch (Exception e) {e.printStackTrace();}}//6、刪除指定元素節(jié)點(diǎn) 刪除第一本書的內(nèi)部價(jià)結(jié)點(diǎn) @Testpublic void test6(){try {//1.得到Document對(duì)象Document document = Dom4jUtil.getDocument();//2.得到根結(jié)點(diǎn)Element root = document.getRootElement();//找到第一本書Element bookEle = root.element("書");Element innerPriceEle = bookEle.element("內(nèi)部價(jià)");bookEle.remove(innerPriceEle);//刪除子結(jié)點(diǎn)//4.寫回XML Dom4jUtil.writeDocument2Xml(document);} catch (Exception e) {e.printStackTrace();}}//7、操作XML文件屬性 在第二本書的書結(jié)點(diǎn)中,添加一個(gè)bookid屬性 @Testpublic void test7(){try {//1.得到Document對(duì)象Document document = Dom4jUtil.getDocument();//2.得到根結(jié)點(diǎn)Element root = document.getRootElement();//3找到第二本書的書結(jié)點(diǎn)Element secondBookEle = (Element)root.elements("書").get(1);//4.設(shè)置屬性secondBookEle.addAttribute("bookid", "isbsb-111");//取屬性值//String sbstr = secondBookEle.attributeValue("bookid");//System.out.println(sbstr);//4.寫回XML Dom4jUtil.writeDocument2Xml(document);} catch (Exception e) {e.printStackTrace();}} }?
轉(zhuǎn)載于:https://www.cnblogs.com/xiarongjin/p/8310836.html
總結(jié)
以上是生活随笔為你收集整理的Dom4j操作XML的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: set 与 map 的第一次尝试
- 下一篇: asp.net ajax控件工具集 Au