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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DOM4J介绍与代码示例 (强大的xml处理工具)

發(fā)布時間:2023/12/19 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DOM4J介绍与代码示例 (强大的xml处理工具) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
DOM4J是dom4j.org出品的一個開源XML解析包。Dom4j是一個易用的、開源的庫,用于XML,XPath和XSLT。它應(yīng)用于Java平臺,采用了Java集合框架并完全支持DOM,SAX和JAXP。關(guān)鍵 牛逼的 oracle 也在使用。 DOM4J下載jar包:http://downloads.sourceforge.net/dom4j/dom4j-1.6.1.jar JAXEN(對XPath的支持):http://dist.codehaus.org/jaxen/distributions/jaxen-1.1.1.zip 1.DOM4J主要接口 DOM4J主要接口都在org.dom4j這個包里定義。 -Node為所有的dom4j中XML節(jié)點(diǎn)定義了多態(tài)行為; -Branch為能夠包含子節(jié)點(diǎn)的節(jié)點(diǎn)如XML元素(Element)和文檔(Docuemnts)定義了一個公共的行為; |-Element 定義XML 元素; |-Document定義了XML文檔; -DocumentType 定義XML DOCTYPE聲明; -Entity定義 XML entity; -Attribute定義了XML的屬性; -ProcessingInstruction 定義 XML 處理指令; -CharacterData是一個標(biāo)識借口,標(biāo)識基于字符的節(jié)點(diǎn)。如CDATA,Comment, Text; |- CDATA 定義了XML CDATA 區(qū)域; |-Text 定義XML 文本節(jié)點(diǎn); |- Comment 定義了XML注釋的行為;

項(xiàng)目結(jié)構(gòu)

?

maven代碼

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>lqy</groupId><artifactId>Dom4jTest</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>Dom4jTest</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><dependency><groupId>jaxen</groupId><artifactId>jaxen</artifactId><version>1.1.4</version></dependency></dependencies> </project>

?

1.創(chuàng)建XML文檔

package lqy.Dom4jTest;import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.HashMap; import java.util.Map;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.XMLWriter;/** 創(chuàng)建XML文檔*/ public class XmlGen {/** 方法generateDocumentByMethod()通過調(diào)用方法構(gòu)建xml文檔:1.使用DocumentHelper得到Document實(shí)例Document document = DocumentHelper.createDocument();2.創(chuàng)建Processing Instructiondocument.addProcessingInstruction("xml-stylesheet", inMap);3.創(chuàng)建元素ElementElement studentsElement = document.addElement("students");4.為元素添加注釋CommentstudentsElement.addComment("An Student Catalog");5.為元素添加屬性studentsElement.addComment("An Student Catalog");6.為元素添加文本值TextageElement.setText("18");*/public Document generateDocumentByMethod() {Document document = DocumentHelper.createDocument();// ProcessingInstructionMap<String, String> inMap = new HashMap<String, String>();inMap.put("type", "text/xsl");inMap.put("href", "students.xsl");document.addProcessingInstruction("xml-stylesheet", inMap);// root elementElement studentsElement = document.addElement("students");studentsElement.addComment("An Student Catalog");// son elementElement stuElement = studentsElement.addElement("student");stuElement.addAttribute("sn", "01");Element nameElement = stuElement.addElement("name");nameElement.setText("sam");Element ageElement = stuElement.addElement("age");ageElement.setText("18");// son elementElement anotherStuElement = studentsElement.addElement("student");anotherStuElement.addAttribute("sn", "02");Element anotherNameElement = anotherStuElement.addElement("name");anotherNameElement.setText("lin");Element anotherAgeElement = anotherStuElement.addElement("age");anotherAgeElement.setText("20");return document;}/** 方法generateDocumentByString()通過字符串轉(zhuǎn)換直接構(gòu)建xml文檔,使用DocumentHelper.parseText()來實(shí)現(xiàn).* document = DocumentHelper.parseText(text);*/public Document generateDocumentByString() {String text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +"<?xml-stylesheet type=\"text/xsl\" href=\"students.xsl\"?>" +"<students><!--An Student Catalog--> <student sn=\"01\">" +"<name>sam</name><age>18</age></student><student sn=\"02\">" +"<name>lin</name><age>20</age></student></students>";Document document = null;try {document = DocumentHelper.parseText(text);} catch (DocumentException e) {e.printStackTrace();}return document;}public void saveDocument(Document document, File outputXml) {try {// 美化格式OutputFormat format = OutputFormat.createPrettyPrint();/*// 縮減格式OutputFormat format = OutputFormat.createCompactFormat();*//*// 指定XML編碼format.setEncoding("GBK");*/XMLWriter output = new XMLWriter(new FileWriter(outputXml), format);output.write(document);output.close();} catch (IOException e) {System.out.println(e.getMessage());}}public static void main(String[] argv) {XmlGen dom4j = new XmlGen();Document document = null;//通過方法生成document=dom4j.generateDocumentByMethod();//通過字符串生成//document = dom4j.generateDocumentByString(); dom4j.saveDocument(document, new File("students-gen.xml"));} }

?

生成students-gen.xml如下

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="students.xsl"?><students><!--An Student Catalog--><student sn="01"><name>sam</name><age>18</age></student><student sn="02"><name>lin</name><age>20</age></student> </students>

?

方法generateDocumentByMethod()通過調(diào)用方法構(gòu)建xml文檔: 1.使用DocumentHelper得到Document實(shí)例 Document document = DocumentHelper.createDocument(); 2.創(chuàng)建Processing Instruction document.addProcessingInstruction("xml-stylesheet", inMap); 3.創(chuàng)建元素Element Element studentsElement = document.addElement("students"); 4.為元素添加注釋Comment studentsElement.addComment("An Student Catalog"); 5.為元素添加屬性 studentsElement.addComment("An Student Catalog"); 6.為元素添加文本值Text ageElement.setText("18"); 方法generateDocumentByString()通過字符串轉(zhuǎn)換直接構(gòu)建xml文檔,使用DocumentHelper.parseText()來實(shí)現(xiàn). document = DocumentHelper.parseText(text); 方法saveDocument(Document document, File outputXml)將文檔輸出到文件保存,可指定字符編碼,可指定格式化輸出。

2.修改XML文檔

package lqy.Dom4jTest; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; import java.util.List;import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter;/** 這里使用xpath來定位待修改的元素和屬性,需要jaxen的支持。*示例中將students-gen.xml的第一個student元素的sn屬性改為001,其子元素name內(nèi)容改為jeff。*XmlMod.java*/ public class XmlMod {/** 1.使用File定位文件資源,并基于此獲得Document實(shí)例*SAXReader saxReader = new SAXReader();*Document document = saxReader.read(inputXml);*2.Document實(shí)例的selectNodes方法可以傳入xpath,并返回一個List實(shí)例,基于此使用迭代器,完成特定的應(yīng)用*List list = document.selectNodes("//students/student/@sn");*/public void modifyDocument(File inputXml) {try {SAXReader saxReader = new SAXReader();Document document = saxReader.read(inputXml);List list = document.selectNodes("//students/student/@sn");Iterator iter = list.iterator();while (iter.hasNext()) {Attribute attribute = (Attribute) iter.next();if (attribute.getValue().equals("01"))attribute.setValue("001");}list = document.selectNodes("//students/student");iter = list.iterator();while (iter.hasNext()) {Element element = (Element) iter.next();Iterator iterator = element.elementIterator("name");while (iterator.hasNext()) {Element nameElement = (Element) iterator.next();if (nameElement.getText().equals("sam"))nameElement.setText("jeff");}}XMLWriter output = new XMLWriter(new FileWriter(new File("students-modified.xml")));output.write(document);output.close();}catch (DocumentException e) {System.out.println(e.getMessage());} catch (IOException e) {System.out.println(e.getMessage());}}/** selectSingleNode如果有多個只取第一個*/public void modifyDocument2(File inputXml){SAXReader saxReader = new SAXReader();try {Document document = saxReader.read(inputXml);Node nodeAttr=document.selectSingleNode("//students/student/@sn");System.out.println(nodeAttr.getText());nodeAttr.setText("nodeAttr");Node nodeEle=document.selectSingleNode("//students/student");System.out.println(nodeEle.getText());nodeEle.setText("nodeEle"); XMLWriter output = new XMLWriter(new FileWriter(new File("students-modified2.xml")));output.write(document); output.close(); } catch (Exception e) {e.printStackTrace();}}public static void main(String[] argv) {XmlMod dom4jParser = new XmlMod();//dom4jParser.modifyDocument(new File("students-gen.xml"));dom4jParser. modifyDocument2(new File("students-gen.xml"));} }

?

生成students-modified.xml

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="students.xsl"?><students><!--An Student Catalog--> <student sn="001"><name>jeff</name><age>18</age></student><student sn="02"><name>lin</name><age>20</age></student> </students>

生成students-modified2.xml

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="students.xsl"?><students><!--An Student Catalog--> <student sn="nodeAttr"><name>sam</name><age>18</age>nodeEle</student><student sn="02"><name>lin</name><age>20</age></student> </students>

?

1.使用File定位文件資源,并基于此獲得Document實(shí)例 SAXReader saxReader =?new?SAXReader(); Document document = saxReader.read(inputXml); 2.Document實(shí)例的selectNodes方法可以傳入xpath,并返回一個List實(shí)例,基于此使用迭代器,完成特定的應(yīng)用 List list = document.selectNodes("//students/student/@sn");

?

3.遍歷XML文檔

這里提供兩種遍歷方法,一種是基于迭代的遍歷,一種是基于Visitor模式的遍歷。這里介紹迭代的

?

package lqy.Dom4jTest;import java.io.File; import java.util.Iterator;import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader;/** 方法traversalDocumentByIterator()提供一種基于迭代的遍歷實(shí)現(xiàn),每個Element通過elementIterator()和attributeIterator()取代其子元素和屬性的迭代器。*/ public class XmlIterator {private File inputXml;public XmlIterator(File inputXml) {this.inputXml = inputXml;}public static void main(String[] argv) {XmlIterator dom4jParser = new XmlIterator(new File("students-gen.xml"));dom4jParser.traversalDocumentByIterator();}public Element getRootElement() {return getDocument().getRootElement();}public Document getDocument() {SAXReader saxReader = new SAXReader();Document document = null;try {document = saxReader.read(inputXml);} catch (Exception e) {e.printStackTrace();}return document;}/** 該方法只是枚舉了兩層,如果一直挖的話要用遞歸方法*/public void traversalDocumentByIterator() {Element root = getRootElement();// 枚舉根節(jié)點(diǎn)下所有子節(jié)點(diǎn)for (Iterator ie = root.elementIterator(); ie.hasNext();) {System.out.println("======");Element element = (Element) ie.next();System.out.println(element.getName());// 枚舉屬性for (Iterator ia = element.attributeIterator(); ia.hasNext();) {Attribute attribute = (Attribute) ia.next();System.out.println(attribute.getName() + ":"+ attribute.getData());}// 枚舉當(dāng)前節(jié)點(diǎn)下所有子節(jié)點(diǎn)for (Iterator ieson = element.elementIterator(); ieson.hasNext();) {Element elementSon = (Element) ieson.next();System.out.println(elementSon.getName() + ":"+ elementSon.getText());}}}}

輸出

?

4.通過Element找到節(jié)點(diǎn)

package lqy.Dom4jTest;import java.io.File; import java.util.Iterator; import java.util.List;import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader;public class XmlReadByElement {/*** @param args* @throws Exception */public static void main(String[] args) throws Exception {XmlReadByElement.getOneEle();XmlReadByElement.getEles();XmlReadByElement.getAttrs();XmlReadByElement.getOneAttr();}public static Document getDocument() throws Exception{SAXReader reader = new SAXReader();Document document = reader.read(new File("students-read.xml"));return document;}//要順序一個一個往下找public static void getOneEle() throws Exception{Document document=getDocument();Element rootElm = document.getRootElement();Element e=rootElm.element("lqy");System.out.println("arrt:"+e.attributeValue("aa"));Element e2=e.element("login");System.out.println("text:"+e2.getText());}public static void getEles() throws Exception{Document document=getDocument();Element rootElm = document.getRootElement();List eList=rootElm.elements("student");Iterator it=eList.iterator();while(it.hasNext()){Element elm=(Element)it.next();System.out.println("arrt:"+elm.attributeValue("sn"));}}public static void getOneAttr() throws Exception{Document document=getDocument();Node node1=document.selectSingleNode("//students/lqy/login");Element elm=(Element)node1;System.out.println("attr:"+elm.attributeValue("sn"));}public static void getAttrs() throws Exception{Document document=getDocument();List list = document.selectNodes("//students/student");Iterator it=list.iterator();while(it.hasNext()){Element elm=(Element)it.next();System.out.println("attr:"+elm.attributeValue("sn"));}}}

?

students-read.xml

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="students.xsl"?><students><!--An Student Catalog--><student sn="01"><name>sam</name><age>18</age></student><student sn="02"><name>lin</name><age>20</age></student><lqy aa="123123123"><login sn="03">luo</login><pass>123456</pass></lqy> </students>

輸出結(jié)果

?

5.通過XPath找到節(jié)點(diǎn)

package lqy.Dom4jTest;import java.io.File; import java.util.Iterator; import java.util.List;import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader;public class XmlReadByXPath {/*** @param args* @throws Exception */public static void main(String[] args) throws Exception {XmlReadByXPath.getOneEleByXPath();XmlReadByXPath.getElesByXPath();XmlReadByXPath.getAttrsByXPath();XmlReadByXPath.getOneAttrByXPath();}public static Document getDocument() throws Exception{SAXReader reader = new SAXReader();Document document = reader.read(new File("students-read.xml"));return document;}public static void getOneEleByXPath() throws Exception{Document document=getDocument();Node node1=document.selectSingleNode("//students/lqy/login");String nodeText1=node1.getText();System.out.println("nodeText1:"+nodeText1);//假如多個只返回第一個Node node2=document.selectSingleNode("//students/student/name");String nodeText2=node2.getText();System.out.println("nodeText2:"+nodeText2);Node node3=document.selectSingleNode("//students/student/@sn");short nodeText3=node1.ATTRIBUTE_NODE;System.out.println("nodeText3:"+nodeText3);}public static void getElesByXPath() throws Exception{Document document=getDocument();List list = document.selectNodes("//students/student/name");Iterator it=list.iterator();while(it.hasNext()){Element elm=(Element)it.next();System.out.println("elm:"+elm.getText());}}public static void getOneAttrByXPath() throws Exception{Document document=getDocument();Node node1=document.selectSingleNode("//students/lqy/login");Element elm=(Element)node1;System.out.println("attr:"+elm.attributeValue("sn"));}public static void getAttrsByXPath() throws Exception{Document document=getDocument();List list = document.selectNodes("//students/student");Iterator it=list.iterator();while(it.hasNext()){Element elm=(Element)it.next();System.out.println("attr:"+elm.attributeValue("sn"));}}}

輸出結(jié)果

?

6.XML轉(zhuǎn)換成String

package lqy.Dom4jTest;import java.io.File; import java.util.Iterator; import java.util.List;import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader;public class XMLToString {/*** @param args* @throws Exception */public static void main(String[] args) throws Exception {SAXReader reader = new SAXReader();Document document = reader.read(new File("students-read.xml")); String docXmlText=document.asXML();System.out.println(docXmlText);System.out.println("------------------docXmlText-------------------");Element root=document.getRootElement(); String rootXmlText=root.asXML();System.out.println(rootXmlText);System.out.println("------------------rootXmlText-------------------");Element memberElm=root.element("lqy");String memberXmlText=memberElm.asXML();System.out.println(memberXmlText);System.out.println("------------------memberXmlText-------------------");}}

?

?輸出

??

?

參考

1.http://zhangjunhd.blog.51cto.com/113473/126310

2.http://www.blogjava.net/junglesong/archive/2008/02/21/181196.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的DOM4J介绍与代码示例 (强大的xml处理工具)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 中文字幕人妻精品一区 | 亚洲区av | 国产噜噜噜 | 91精品国产综合久久久蜜臀九色 | 精品动漫一区 | 天天躁狠狠躁狠狠躁夜夜躁68 | 国产精品久久久久久免费 | 亚洲色图欧美另类 | 人妻少妇精品中文字幕av蜜桃 | 久热av在线 | 日韩欧美亚洲视频 | 一级片视频免费看 | 国产原创视频 | 国产欧美精品一区二区三区app | 美女无遮挡免费网站 | 91插插插插 | 欧美女优一区 | 九九九九久久久久 | 国产精品久久久久久久裸模 | 精品一区二区视频在线观看 | 欧美日韩国产亚洲沙发 | 久草网在线观看 | 国产精品午夜福利视频234区 | 性开放耄耋老妇hd | 免费在线一级片 | 亚洲精品一线二线三线 | 日批视频免费观看 | 学生调教贱奴丨vk | 欧美高清x | 少妇做爰免费理伦电影 | 乱h伦h女h在线视频 99999视频 | 日本黄色片段 | 夜夜骚网站 | www.狠狠操.com | 一区影视 | 天天摸天天摸 | 精品无码人妻一区二区三 | 欧美黑人性猛交xxxx | 久久五月天综合 | 日本一区二区久久 | 国产sss | av在线短片| 亚洲一区二区三区在线免费观看 | 国产av一区二区三区精品 | 99爱在线视频 | 欧美多人猛交狂配 | 日本亚洲一区二区三区 | 四虎8848精品成人免费网站 | 东京干手机福利视频 | 午夜天堂视频 | 欧美激情一区二区三区免费观看 | 在线永久看片免费的视频 | 538国产精品视频一区二区 | 台湾a级艳片潘金莲 | 中文字幕网站在线观看 | 波多野结衣一二三区 | 99精品久久久久 | 日韩精品高清视频 | 日本不卡一二三区 | 五月激情综合 | 农村妇女毛片精品久久久 | 天天干天天搞天天射 | 午夜av成人| 午夜久久久久久噜噜噜噜 | 婷婷色av | 久久精品国产亚洲av麻豆色欲 | 日本网站在线免费观看 | aa爱做片免费 | 动漫玉足吸乳羞免费网站玉足 | 亚洲av成人精品一区二区三区在线播放 | 久久久久久艹 | 老熟妇高潮一区二区三区 | 91久久精品日日躁夜夜躁欧美 | 亚洲成人中文字幕在线 | 成人小视频在线免费观看 | 亚洲永久精品国产 | 无人码人妻一区二区三区免费 | 91成人免费看 | 涩涩999| 成人免费视频国产在线观看 | 亚洲免费网站 | 亚洲av日韩av永久无码下载 | 亚洲黄色免费观看 | 国产精品视频一区二区三区在3 | 这里有精品视频 | 麻豆视屏 | 一本色道久久88综合日韩精品 | 九九热视频免费观看 | √资源天堂中文在线视频 | 伊人网视频在线观看 | 色哟哟入口 | 欧美黄片一区二区三区 | 青娱乐久久 | 亚洲精品成人无码熟妇在线 | 国产久一 | 免费久久精品视频 | 性色av一区二区三区免费 | 亚洲精品一级片 | 久久大尺度 |