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