(原创)用dom4j实现提取网络的rss信息并存入本地的xml文件实例
org.dom4j.document的用法
org.dom4j.document的用法1.概述o r g.do m4j.do cu men t是一个J av a语言中常用的XM L文档处理库,提供了丰富的功能和便捷的A PI,可以用于解析、创建、修改和操作X ML 文档。
本文将介绍or g.d om4j.d oc um ent的用法,包括文档的创建、节点的查找和修改等。
2.创建文档要使用o rg.d om4j.d o cu me nt,首先需要引入相关的库文件或依赖。
然后可以通过以下方式创建空白的XM L文档:D o cu me nt do cu me nt=D oc um en tH el pe r.c r ea te Do cu me nt();接下来可以向文档中添加根节点和其他节点,例如:E l em en tr oo tE le men t=d oc um en t.ad dEl e me nt("ro ot");E l em en tc hi ld El eme n t=ro ot El em en t.a d dE le me nt("ch ild");3.查找节点o r g.do m4j.do cu men t提供了多种方法用于查找文档中的节点。
下面是几个常用的查找方法的示例:3.1通过路径查找可以使用XP at h表达式来查找节点,例如:E l em en te le me nt=(E l em en t)do cu me nt.s el ec tS in gl eN ode("//r o o t/c hi ld");3.2通过名称查找可以使用节点的名称查找节点,例如:E l em en te le me nt=do c um en t.ge tR oo tEl e me nt().e le me nt("ch il d ");3.3通过属性查找可以使用节点的属性来查找节点,例如:E l em en te le me nt=(E l em en t)do cu me nt.s el ec tS in gl eN ode("//r o o t/c hi ld[@at tr='v a lu e']");4.修改节点o r g.do m4j.do cu men t也允许对节点进行修改操作,包括添加、删除和修改节点的属性等。
(原创)用dom4j实现提取网络的rss信息并存入本地的xml文件实例
Element lastNameElement=authorElement.addElement("lastname");
lastNameElement.setText("Vitaletti");
try{
XMLWriter output = new XMLWriter(new FileWriter( new File("d:/qqq1.xml") ));
output.write( document );
output.close();
}
catch(IOException e){
System.out.println(e.getMessage());
}
}
public static void main(String[] args){
XmlDom4J dom4j=new XmlDom4J();
}
二。XmlDom4J.java文件:
//写入文件d:/qqq.xml
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;
import java.io.*;
titleElement.setText("Java configuration with XML Schema");
Element authorElement=articleElement.addElement("author");
dom4j用法
dom4j用法dom4j是一个开源的JavaXML解析库,用于解析XML文档并提供API来操作XML元素和属性。
它可以轻松地读取、分析和生成XML文件。
dom4j支持使用XPath表达式来访问XML文档中的节点和属性。
XPath是一种用于在XML文档中定位节点的语言。
dom4j还提供了一些高级功能,如XML命名空间的支持和DTD验证。
使用dom4j可以轻松地解析XML文档,例如:```SAXReader reader = new SAXReader();Document document = reader.read(newFile('path/to/xml/file.xml'));Element root = document.getRootElement();List<Element> elements = root.elements();for (Element element : elements) {//访问元素}```在上面的代码中,我们使用SAXReader类读取XML文档,并获取根元素。
然后,我们可以使用getRootElement()方法获取XML文档的根元素,并使用elements()方法获取根元素的所有子元素。
除了解析XML文档外,dom4j还提供了API来创建新的XML文档。
例如:```Document document = DocumentHelper.createDocument();Element root = document.addElement('root');Element child = root.addElement('child');child.addAttribute('attribute', 'value');child.setText('text');```在上面的代码中,我们使用DocumentHelper类创建一个新的XML 文档,并添加根元素和一个子元素。
dom4j下载与使用文档
Dom4j下载及使用Dom4j读写XML简介要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在/目前最新dom4j包下载地址:/sourceforge/dom4j/dom4j-1.6.1.zip解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就可以了,如果需要使用XPath的话还需要加入包jaxen-1.1-beta-7.jar.以下是相关操作:一.Document对象相关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.主动创建document对象.Document document = DocumentHelper.createDocument();Element root = document.addElement("members");// 创建根节点二.节点相关1.获取文档的根节点.Element rootElm = document.getRootElement();2.取得某节点的单个子节点.Element memberElm=root.element("member");// "member"是节点名3.取得节点的文字String text=memberElm.getText();也可以用:String text=root.elementT ext("name");这个是取得根节点下的name字节点的文字.4.取得某节点下名为"member"的所有字节点并进行遍历.List nodes = rootElm.elements("member");for (Iterator it = nodes.iterator(); it.hasNext();) {Element elm = (Element) it.next();// do something}5.对某节点下的所有子节点进行遍历.for(Iterator it=root.elementIterator();it.hasNext();){Element element = (Element) it.next();// do something}6.在某节点下添加子节点.Element ageElm = newMemberElm.addElement("age");7.设置节点文字.ageElm.setText("29");8.删除某节点.parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点三.属性相关.1.取得某节点下的某属性Element root=document.getRootElement();Attribute attribute=root.attribute("size");// 属性名name2.取得属性的文字String text=attribute.getText();也可以用:String text2=root.element("name").attributeValue("firstname");这个是取得根节点下name字节点的属性firstname的值.3.遍历某节点的所有属性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.设置某节点的属性和文字.newMemberElm.addAttribute("name", "sitinspring");5.设置属性的文字Attribute attribute=root.attribute("name");attribute.setText("sitinspring");6.删除某属性Attribute attribute=root.attribute("size");// 属性名nameroot.remove(attribute);四.将文档写入XML文件.1.文档中全为英文,不设置编码,直接写入的形式.XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));writer.write(document);writer.close();2.文档中含有中文,设置编码格式写入的形式.OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("GBK"); // 指定XML编码XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);writer.write(document);writer.close();五.字符串与XML的转换1.将字符串转化为XMLString text = "<members> <member>sitinspring</member> </members>";Document document = DocumentHelper.parseText(text);2.将文档或节点的XML转化为字符串.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();六.使用XPath快速找到节点.读取的XML文档示例<?xml version="1.0" encoding="UTF-8"?><projectDescription><name>MemberManagement</name><comment></comment><projects><project>PRJ1</project><project>PRJ2</project><project>PRJ3</project><project>PRJ4</project></projects><buildSpec><buildCommand><name>org.eclipse.jdt.core.javabuilder</name><arguments></arguments></buildCommand></buildSpec><natures><nature>org.eclipse.jdt.core.javanature</nature></natures></projectDescription>使用XPath快速找到节点project.public static void main(String[] args){SAXReader reader = new SAXReader();try{Document doc = reader.read(new File("sample.xml"));List projects=doc.selectNodes("/projectDescription/projects/project"); Iterator it=projects.iterator();while(it.hasNext()){Element elm=(Element)it.next();System.out.println(elm.getText()); }}catch(Exception ex){ex.printStackTrace();}}。
dom4j解析xml字符串实例
dom4j解析xml字符串实例DOM4J与利用DOM、SAX、JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异、功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml。
dom4j是一套开源的api。
实际项目中,往往选择dom4j来作为解析xml的利器。
先来看看dom4j中对应XML的DOM树建立的继承关系针对于XML标准定义,对应于图2-1列出的内容,dom4j提供了以下实现:同时,dom4j的NodeType枚举实现了XML规范中定义的node类型。
如此可以在遍历xml文档的时候通过常量来判断节点类型了。
常用APIclass org.dom4j.io.SAXReaderread提供多种读取xml文件的方式,返回一个Domcument对象interface org.dom4j.Document∙iterator使用此法获取node∙getRootElement获取根节点interface org.dom4j.Node∙getName获取node名字,例如获取根节点名称为bookstore∙getNodeType获取node类型常量值,例如获取到bookstore类型为1——Element∙getNodeTypeName获取node类型名称,例如获取到的bookstore 类型名称为Elementinterface org.dom4j.Element∙attributes返回该元素的属性列表∙attributeValue根据传入的属性名获取属性值∙elementIterator返回包含子元素的迭代器∙elements返回包含子元素的列表interface org.dom4j.Attribute∙getName获取属性名∙getValue获取属性值interface org.dom4j.Text∙getText获取Text节点值interface org.dom4j.CDATA∙getText获取CDATA Section值interface ment∙getText获取注释实例一:1//先加入dom4j.jar包2import java.util.HashMap;3import java.util.Iterator;4import java.util.Map;56import org.dom4j.Document;7import org.dom4j.DocumentException;8import org.dom4j.DocumentHelper;9import org.dom4j.Element;1011/**12* @Title: TestDom4j.java13* @Package14* @Description: 解析xml字符串15* @author无处不在16* @date 2012-11-20 下午05:14:0517* @version V1.018*/19public class TestDom4j {2021public void readStringXml(String xml) {22 Document doc = null;23try {2425// 读取并解析XML文档26// SAXReader就是一个管道,用一个流的方式,把xml文件读出来27//28// SAXReader reader = new SAXReader(); //User.hbm.xml 表示你要解析的xml文档29// Document document = reader.read(newFile("User.hbm.xml"));30// 下面的是通过解析xml字符串的31 doc = DocumentHelper.parseText(xml); // 将字符串转为XML3233 Element rootElt = doc.getRootElement(); // 获取根节点34 System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称3536 Iterator iter = rootElt.elementIterator("head"); // 获取根节点下的子节点head3738// 遍历head节点39while (iter.hasNext()) {4041 Element recordEle = (Element) iter.next();42 String title = recordEle.elementTextTrim("title"); // 拿到head节点下的子节点title值43 System.out.println("title:" + title);4445 Iterator iters =recordEle.elementIterator("script"); // 获取子节点head下的子节点script4647// 遍历Header节点下的Response节点48while (iters.hasNext()) {4950 Element itemEle = (Element) iters.next();5152 String username =itemEle.elementTextTrim("username"); // 拿到head下的子节点script下的字节点username的值53 String password =itemEle.elementTextTrim("password");5455 System.out.println("username:" + username);56 System.out.println("password:" + password);57 }58 }59 Iterator iterss = rootElt.elementIterator("body"); ///获取根节点下的子节点body60// 遍历body节点61while (iterss.hasNext()) {6263 Element recordEless = (Element) iterss.next();64 String result =recordEless.elementTextTrim("result"); // 拿到body节点下的子节点result值65 System.out.println("result:" + result);6667 Iterator itersElIterator =recordEless.elementIterator("form"); // 获取子节点body下的子节点form 68// 遍历Header节点下的Response节点69while (itersElIterator.hasNext()) {7071 Element itemEle = (Element)itersElIterator.next();7273 String banlce =itemEle.elementTextTrim("banlce"); // 拿到body下的子节点form下的字节点banlce的值74 String subID =itemEle.elementTextTrim("subID");7576 System.out.println("banlce:" + banlce);77 System.out.println("subID:" + subID);78 }79 }80 } catch (DocumentException e) {81 e.printStackTrace();8283 } catch (Exception e) {84 e.printStackTrace();8586 }87 }8889/**90 * @description 将xml字符串转换成map91 * @param xml92 * @return Map93*/94public static Map readStringXmlOut(String xml) {95 Map map = new HashMap();96 Document doc = null;97try {98// 将字符串转为XML99 doc = DocumentHelper.parseText(xml);100// 获取根节点101 Element rootElt = doc.getRootElement();102// 拿到根节点的名称103 System.out.println("根节点:" + rootElt.getName()); 104105// 获取根节点下的子节点head106 Iterator iter = rootElt.elementIterator("head");107// 遍历head节点108while (iter.hasNext()) {109110 Element recordEle = (Element) iter.next();111// 拿到head节点下的子节点title值112 String title = recordEle.elementTextTrim("title"); 113 System.out.println("title:" + title);114 map.put("title", title);115// 获取子节点head下的子节点script116 Iterator iters =recordEle.elementIterator("script");117// 遍历Header节点下的Response节点118while (iters.hasNext()) {119 Element itemEle = (Element) iters.next(); 120// 拿到head下的子节点script下的字节点username的值121 String username =itemEle.elementTextTrim("username");122 String password =itemEle.elementTextTrim("password");123124 System.out.println("username:" + username); 125 System.out.println("password:" + password); 126 map.put("username", username);127 map.put("password", password);128 }129 }130131//获取根节点下的子节点body132 Iterator iterss = rootElt.elementIterator("body"); 133// 遍历body节点134while (iterss.hasNext()) {135 Element recordEless = (Element) iterss.next(); 136// 拿到body节点下的子节点result值137 String result =recordEless.elementTextTrim("result");138 System.out.println("result:" + result);139// 获取子节点body下的子节点form140 Iterator itersElIterator =recordEless.elementIterator("form");141// 遍历Header节点下的Response节点142while (itersElIterator.hasNext()) {143 Element itemEle = (Element)itersElIterator.next();144// 拿到body下的子节点form下的字节点banlce 的值145 String banlce =itemEle.elementTextTrim("banlce");146 String subID =itemEle.elementTextTrim("subID");147148 System.out.println("banlce:" + banlce);149 System.out.println("subID:" + subID);150 map.put("result", result);151 map.put("banlce", banlce);152 map.put("subID", subID);153 }154 }155 } catch (DocumentException e) {156 e.printStackTrace();157 } catch (Exception e) {158 e.printStackTrace();159 }160return map;161 }162163public static void main(String[] args) {164165// 下面是需要解析的xml字符串例子166 String xmlString = "<html>" + "<head>" + "<title>dom4j解析一个例子</title>"167 + "<script>" + "<username>yangrong</username>" 168 + "<password>123456</password>" + "</script>" + "</head>"169 + "<body>" + "<result>0</result>" + "<form>"170 + "<banlce>1000</banlce>" +"<subID>36242519880716</subID>"171 + "</form>" + "</body>" + "</html>";172173/*174 * Test2 test = new Test2(); test.readStringXml(xmlString); 175*/176 Map map = readStringXmlOut(xmlString);177 Iterator iters = map.keySet().iterator();178while (iters.hasNext()) {179 String key = iters.next().toString(); // 拿到键180 String val = map.get(key).toString(); // 拿到值181 System.out.println(key + "=" + val);182 }183 }184185 }实例二:1/**2 * 解析包含有DB连接信息的XML文件3 * 格式必须符合如下规范:4 * 1. 最多三级,每级的node名称自定义;5 * 2. 二级节点支持节点属性,属性将被视作子节点;6 * 3. CDATA必须包含在节点中,不能单独出现。
javadom4j解析xml实例
javadom4j解析xml实例1.要解析的xml⽂件data.xml:<?xml version="1.0" encoding="UTF-8"?><ReturnInfo><userlist><item index="1" level="60" nickname="凄惨的⽼⽣" country="⾦"weiwang="136929" /><item index="2" level="85" nickname="哭泣的⾄尊宝" country="⾦"weiwang="97490" /><item index="3" level="85" nickname="⽼公" country="⾦"weiwang="91103" /><item index="4" level="78" nickname="冉闵" country="⾦"weiwang="82828" /><item index="5" level="55" nickname="erggh" country="⾦"weiwang="77440" /><item index="6" level="60" nickname="孤峰" country="⾦"weiwang="67821" /><item index="7" level="60" nickname="乱世" country="⾦"weiwang="67675" /><item index="8" level="62" nickname="叛逆之神" country="⾦"weiwang="61839" /><item index="9" level="60" nickname="双乔主⼈" country="⾦"weiwang="61647" /><item index="10" level="60" nickname="视觉效果" country="⾦"weiwang="50200" /><item index="11" level="60" nickname="⿁⿁" country="⾦"weiwang="49537" /><item index="12" level="59" nickname="狂龙在天" country="⾦"weiwang="46687" /><item index="13" level="60" nickname="⼩⼦" country="⾦"weiwang="46152" /><item index="14" level="52" nickname="zzy" country="⾦"weiwang="39017" /><item index="15" level="53" nickname="ycf" country="⾦"weiwang="30333" /><item index="16" level="52" nickname="⽆界之魂" country="⾦"weiwang="20294" /><item index="17" level="42" nickname="⼑锋狼" country="⾦"weiwang="18842" /><item index="18" level="60" nickname="mnbvc" country="⾦"weiwang="18102" /><item index="19" level="41" nickname="赢政" country="⾦"weiwang="16331" /><item index="20" level="52" nickname="徐匡胤" country="⾦"weiwang="16156" /></userlist></ReturnInfo>2、具体解析程序如下:package demo4;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.io.SAXReader;public class TestJava {public static void main(String args[]) throws DocumentException {SAXReader reader = new SAXReader();Document document = reader.read(new File("D:/data.xml"));Element rootElm = document.getRootElement();Element root1Elm = rootElm.element("userlist");List nodes = root1Elm.elements("item");for (Iterator it = nodes.iterator(); it.hasNext();) {Element elm = (Element) it.next();System.out.println("index:" + elm.attributeValue("index")+ " level:" + elm.attributeValue("level") + " nickname:"+ elm.attributeValue("nickname") + " country:"+ elm.attributeValue("country") + " weiwang:"+ elm.attributeValue("weiwang"));}try {Document doc = reader.read(new File("D:/data.xml"));List projects = doc.selectNodes("ReturnInfo/userlist/item");Iterator it = projects.iterator();while (it.hasNext()) {Element elm = (Element) it.next();System.out.println("index:" + elm.attributeValue("index")+ " level:" + elm.attributeValue("level")+ " nickname:" + elm.attributeValue("nickname")+ " country:" + elm.attributeValue("country")+ " weiwang:" + elm.attributeValue("weiwang"));}} catch (Exception ex) {ex.printStackTrace();}}}3、运⾏结果如下图所⽰:<1>、jaxen-1.1-beta-7.jar架包导⼊后不报异常,正常得到结果:<2>、jaxen-1.1-beta-7.jar架包不导⼊后报异常,但也能得到结果:。
DOM4j读取XML文件(SAXReader)
、一个很好的SAXReader读写xml文件的例题;总结:Document document=new SAXReader.reader(“xml文路径/文件名xxx.xml”);//得到Document对象Element root = document.getRootElement()//获得根节点Iterator iterator=root.elementIterator(); //从根节点遍历子节点Iterator iterator=Element.elementIterator(); //再从子节点在遍历其子节点对节点访问其属性用:Attribute leaderAttr =Element. attribute(“xxx”);对节点访问其某个属性leaderAttr的名称:leaderAttr.getName();对节点访问其某个属性leaderAttr的值:leaderAttr.getValue()对节点访问其名称:Element.getName();对节点访问其文本:Element. getText();简单代码为如下:Docume nt document=new SAXReader.reader(“xml文路径/文件名xxx.xml”); Element root = document.getRootElement();HashMap hm = new HashMap<String,String>();for ( Iterator iter = root.elementIterator(); iter.hasNext(); ) { Element element = (Element) iter.next();Attribute ageAttr=element.attribute("age");String age = ageAttr.getValue();。
dom4j asxml的用法
Element root = document.addElement("root");
// 添加子素和属性
Element childElement = root.addElement("child");
childElement.addAttribute("name", "Child Element");
dom4j asxml的用法
dom4j是一个用于处理XML文档的Java开发包。它提供了一系列简单又强大的API,可以帮助开发人员轻松地解析、操作和生成XML文档。
而其中的asXML()方法是dom4j中一个非常有用的方法。它可以将一个dom4j的Document对象转换为一个XML字符串,方便我们进行数据的存储、传输或者显示。
}
}
```
上述代码首先创建了一个Document对象,并在其中创建了一个根元素和一个子元素。然后,通过调用asXML()方法将Document对象转换为一个XML字符串。最后,将转换结果打印到控制台。
输出结果如下:
```
<?xml version="1.0" encoding="UTF-8"?>
<root>
<child name="Child Element">This is a child element.</child>
</root>
```
可以看到,asXML()方法将Document对象转换为了一个符合XML规范的字符串。我们可以根据需要进一步处理该字符串,如保存到文件中或通过网络进行传输。
scala中引用dom4j解析xml
scala中引用dom4j解析xml使用Scala中的dom4j库解析XML文件一、引言在软件开发过程中,经常需要处理和解析XML数据。
XML是一种标记语言,用于存储和传输数据。
为了方便处理XML数据,许多编程语言提供了相应的库和工具。
本文将介绍如何使用Scala中的dom4j库来解析XML文件。
二、dom4j简介dom4j是一个用于处理XML数据的Java库。
它提供了简单易用的API,使开发人员能够轻松地读取、修改和创建XML文档。
dom4j库具有高性能和低内存消耗的特点,因此被广泛应用于各种项目中。
三、使用dom4j解析XML1. 导入dom4j库首先,我们需要在Scala项目中导入dom4j库。
可以使用SBT或Maven等构建工具来管理项目依赖。
2. 创建XML解析器在Scala中使用dom4j解析XML文件,首先需要创建一个XML解析器对象。
可以通过如下代码来创建一个解析器对象:```scalaval xmlParser = new SAXReader()```3. 加载XML文件使用解析器对象加载XML文件。
可以通过文件路径或输入流来加载XML文件。
例如,使用文件路径加载XML文件的代码如下:```scalaval document = xmlParser.read(new File("path/to/xml/file.xml"))```4. 解析XML数据通过解析器对象,可以获取XML文档的根元素,并遍历其子元素和属性。
以下示例代码演示了如何解析XML数据:```scalaval rootElement = document.getRootElement()// 遍历子元素val elements = rootElement.elements()for (i <- 0 until elements.size()) {val element = elements.get(i).asInstanceOf[Element]// 处理子元素println("子元素名称:" + element.getName())}// 获取属性val attributes = rootElement.attributes()for (i <- 0 until attributes.size()) {val attribute = attributes.get(i).asInstanceOf[Attribute]// 处理属性println("属性名:" + attribute.getName() + ",属性值:" + attribute.getValue())}```5. 解析XML文档结构dom4j库提供了丰富的API来解析XML文档的结构。
dom4j解析xml
dom4j解析xml现在有很多⼯具包可以解析xml⽂件,但是dom4j⽆疑是其中较为简单的⼀种,下⾯就⽤⼀个例⼦来实际操作⼀下:⾸先得导⼊dom4j.jar这个夹包(⽹上⼀搜⼀⼤⽚)1.随便在⼀个地⽅建⽴⼀个user.xml⽂件,我这⼉是建⽴在d盘根⽬录下:1. <?xml version="1.0" encoding="UTF-8"?>2.3. <users>4. <user username="lisi" password="123"/>5. <user username="张三" password="123"/>6. <user username="zhangsan" password="123"/>7.8. </users><?xml version="1.0" encoding="UTF-8"?><users><user username="lisi" password="123"/><user username="张三" password="123"/><user username="zhangsan" password="123"/></users>2.对该⽂件进⾏模拟查询⽤户(按姓名查询)和添加⽤户:1. package com.easyteam.dao;2.3. import java.io.FileNotFoundException;4. import java.io.FileOutputStream;5. import java.io.IOException;6. import java.io.OutputStream;7. import java.io.OutputStreamWriter;8. import java.io.UnsupportedEncodingException;9.10. import org.dom4j.Document;11. import org.dom4j.DocumentException;12. import org.dom4j.Element;13. import org.dom4j.io.OutputFormat;14. import org.dom4j.io.SAXReader;15. import org.dom4j.io.XMLWriter;16.17. import er;18.19.20. public class Userdao {21.22. String path="d://user.xml";23.24. public User findByName(String username){25. SAXReader red=new SAXReader();//创建解析器26. try {27. Document doc=red.read(path);//得到documet对象28. Element el=(Element) doc.selectSingleNode("//user[@username='"+username+"']");//查询条件,其中//表⽰⽆限深度查询,[]中放⼊是查询条件29. if(el==null) return null;30. String attUsername=el.attributeValue("username");//得到username这个属性的值31. String attPassword=el.attributeValue("password");32. User user=new User();33. user.setUsername(attUsername);34. user.setPassword(attPassword);35. return user;36. } catch (DocumentException e) {37. throw new RuntimeException(e);38. }39. }40. public void addUser(User user){41.42. SAXReader red=new SAXReader();43. try {44. Document doc = red.read(path);45. Element attroot=doc.getRootElement();//得到根节点46. Element userel=attroot.addElement("user");//添加节点47. userel.addAttribute("username", user.getUsername());//给新节点赋值48. userel.addAttribute("password", user.getPassword());49.50. OutputFormat format=new OutputFormat("\t", true);//设置格式51. format.setTrimText(true);//清除原有格式52. XMLWriter writer;53. try {54. writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream(path),"utf-8"),format);//实例化55. writer.write(doc);//保存56. writer.close();57. } catch (Exception e) {58. throw new RuntimeException(e);59. }60.61. } catch (DocumentException e) {62. throw new RuntimeException(e);63. }64. }65. }3.测试类:1. package com.easyteam.test;2.3. import org.junit.Test;4.5. import erdao;6. import er;7.8.9. public class UserDaoTest {10. @Test11.12. public void testfindByName(){13. Userdao dao=new Userdao();14. User user= dao.findByName("lisi");15. System.out.println(user);16.17. }18. @Test19. public void testaddUser(){20. Userdao dao=new Userdao();21. User user=new User();22. user.setUsername("张三");23. user.setPassword("123");24. dao.addUser(user);25.26.27.28. }29. }。
Dom4j完整教程,操作XML教程
Dom4j完整教程,操作XML教程⽬录1、DOM4J简介2、XML⽂档操作12.1、读取XML⽂档:2.2、获取根节点2.3、. 新增⼀个节点以及其下的⼦节点与数据2.4、写⼊XML⽂件2. 5、遍历xml节点2.6、创建xml⽂件2.7、修改节点属性2.8、删除节点2、XML⽂档操作22.1、Document对象相关1、读取XML⽂件,获得document对象.2、解析XML形式的⽂本,得到document对象.3、主动创建document对象.2.2、节点相关1、获取⽂档的根节点.2、取得某节点的单个⼦节点.3.取得节点的⽂字4.取得某节点下指定名称的所有节点并进⾏遍历.5.对某节点下的所有⼦节点进⾏遍历.6.在某节点下添加⼦节点.7.设置节点⽂字.8.删除某节点.9.添加⼀个CDATA节点.2.3、属性相关.1.取得节点的指定的属性2.取得属性的⽂字3.遍历某节点的所有属性4.设置某节点的属性和⽂字.5.设置属性的⽂字6.删除某属性2.4、将⽂档写⼊XML⽂件.1.⽂档中全为英⽂,不设置编码,直接写⼊.2.⽂档中含有中⽂,设置编码格式再写⼊.2.5、字符串与XML的转换1.将字符串转化为XML2.将⽂档或节点的XML转化为字符串.3、dom4j的事件处理模型涉及的类和接⼝:3.1、类:SAXReader3.2、接⼝ElementHandler3.3、Element类3.4、类DocumentHelper4、通过xpath查找指定的节点4.1、 xpath语法1、选取节点2、谓语(Predicates)3、选取未知节点4、选取若⼲路径5、XPath 轴6、路径7、XPath 运算符1、DOM4J简介DOM4J是 出品的⼀个开源 XML 解析包。
DOM4J应⽤于 Java 平台,采⽤了 Java 集合框架并完全⽀持 DOM,SAX 和 JAXP。
DOM4J 使⽤起来⾮常简单。
只要你了解基本的 XML-DOM 模型,就能使⽤。
Dom4j解析xml文件-递归遍历所有节点和属性
Dom4j解析xml⽂件-递归遍历所有节点和属性Dom4j是中常⽤读取xml⽂件的⼯具,就⽅便性和性能⽅⾯,⼀定程度要优于JDK中Domcument和SAX解析的,感兴趣的童鞋可以看看这篇⽂章,下边我就分享⼀下⽤Dom4j对xml⽂件进⾏遍历,⼀看代码就明⽩了,注释的很详细。
被测试的xml⽂件test.xml<?xml version="1.0" encoding="UTF-8"?><root><user editor="chenleixing" date="2015-02-15"><name>张三</name><year>24</year><sex>男</sex></user><user editor="zhangxiaochao" date="2015-02-15"><name>李四</name><year>24</year><sex>⼥</sex></user></root>创建File,获取根节点/*** 从指定节点开始,递归遍历所有⼦节点* @author chenleixing*/public void getNodes(Element node){System.out.println("--------------------");//当前节点的名称、⽂本内容和属性System.out.println("当前节点名称:"+node.getName());//当前节点名称System.out.println("当前节点的内容:"+node.getTextTrim());//当前节点名称List<Attribute> listAttr=node.attributes();//当前节点的所有属性的listfor(Attribute attr:listAttr){//遍历当前节点的所有属性String name=attr.getName();//属性名称String value=attr.getValue();//属性的值System.out.println("属性名称:"+name+"属性值:"+value);}//递归遍历当前节点所有的⼦节点List<Element> listElement=node.elements();//所有⼀级⼦节点的listfor(Element e:listElement){//遍历所有⼀级⼦节点this.getNodes(e);//递归}}从指定节点开始,递归遍历所有节点和属性/*** 从指定节点开始,递归遍历所有⼦节点* @author chenleixing*/public void getNodes(Element node){System.out.println("--------------------");//当前节点的名称、⽂本内容和属性System.out.println("当前节点名称:"+node.getName());//当前节点名称System.out.println("当前节点的内容:"+node.getTextTrim());//当前节点名称 List<Attribute> listAttr=node.attributes();//当前节点的所有属性的list for(Attribute attr:listAttr){//遍历当前节点的所有属性String name=attr.getName();//属性名称String value=attr.getValue();//属性的值System.out.println("属性名称:"+name+"属性值:"+value);}//递归遍历当前节点所有的⼦节点List<Element> listElement=node.elements();//所有⼀级⼦节点的list for(Element e:listElement){//遍历所有⼀级⼦节点this.getNodes(e);//递归}}输出结果--------------------当前节点名称:root当前节点的内容:--------------------当前节点名称:user当前节点的内容:属性名称:editor属性值:chenleixing属性名称:date属性值:2015-02-15--------------------当前节点名称:name当前节点的内容:张三--------------------当前节点名称:year当前节点的内容:24--------------------当前节点名称:sex当前节点的内容:男--------------------当前节点名称:user当前节点的内容:属性名称:editor属性值:zhangxiaochao属性名称:date属性值:2015-02-15--------------------当前节点名称:name当前节点的内容:李四--------------------当前节点名称:year当前节点的内容:24--------------------当前节点名称:sex当前节点的内容:⼥。
dom4j解析xml的原理
dom4j解析xml的原理XML(Extensible Markup Language)是一种可扩展的标记语言,主要用于数据的存储和传输。
而dom4j是一种基于Java的XML解析器,它提供了一种简单且高效的方法来解析和处理XML文档。
本文将介绍dom4j解析XML的原理以及它的主要特点。
一、dom4j简介dom4j是一个开源的XML解析器,它采用Java语言开发。
相比于其他XML解析器,dom4j具有更高的性能和更简洁的API。
它能够将XML文档解析成一个树形结构,通过遍历这个结构来获取XML中的各个元素和属性。
二、dom4j的原理1. 加载XML文档dom4j使用SAX解析器,它可以逐行读取XML文档并将其转换成事件流。
首先,需要创建一个SAXReader对象,通过调用其read()方法,将XML文档加载到内存中。
2. 构建Document对象在加载XML文档后,dom4j会解析它,并将其转换成一个Document对象。
这个对象代表了整个XML文档的根节点,通过它可以获取XML文档中的各个节点和属性。
3. 遍历XML树拿到Document对象之后,我们可以通过它来遍历整个XML树。
dom4j提供了一系列的方法,如elementIterator()、attributeIterator()等,用于获取当前节点的子节点或属性。
4. 获取节点内容一旦获取到具体的节点,我们可以通过调用其getText()方法或getStringValue()方法来获取节点的文本内容。
5. 获取节点属性类似地,要获取节点的属性,可以通过调用attributeValue()方法或getAttributes()方法来获取。
6. 增删改查dom4j还支持对XML文档进行增删改查的操作。
我们可以通过调用相应的API来添加新节点、删除节点、修改节点内容等。
三、dom4j的特点1. 简洁而灵活的API:dom4j提供了一套简洁而强大的API,使得操作XML文档变得非常方便。
使用dom4j解析XML文档
使⽤dom4j解析XML⽂档dom4j的包开源包,不属于JDK⾥⾯,在myeclipse中要单独导⼊在项⽬中,这⾥不累赘了做这个过程,很慢,因为很多⽅法没⽤过不熟悉,⾃⼰得去查帮助⽂档,⽽且还得去试,因为没有中⽂版,英⽂翻译不准确,也会导致多个同名的⽅法理解和⽤法不同XML:<?xml version="1.0" encoding="utf-8"?><students><student age="25"><name>张三</name><college>信息学院</college><telphone>136********</telphone><notes>男,1982年⽣,硕⼠,现就读于北京邮电⼤学</notes></student><student ><name>李四</name><college leader="leader">PC学院</college><telphone>136********</telphone><notes>男,1983年⽣,硕⼠,现就读于中国农业⼤学</notes></student></students>使⽤dom4j进⾏增、删、查、改、保存更新(不想对原⽂件进⾏操作,所以输出到另⼀个⽂件中,看更新后的内容)代码如下:package d0620;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Iterator;import java.util.List;import org.dom4j.DocumentException;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.Element;import org.w3c.dom.NodeList;/** 使⽤Dom4j解析XML⽂档*/public class StudentDom4j {private Document document;public void getDom(File file){// 创建SAXReader creates a DOM4J tree from SAX parsing events. 创建SAX解析器SAXReader sax=new SAXReader();try {// ⽣成DOM树document=sax.read(file);} catch (DocumentException e) {e.printStackTrace();}}// 读取student.xml⽂件中的信息public void showXML(File file){// 获取XML的根节点Element root=document.getRootElement();System.out.println("Root:"+root.getName());//获取所有⼦元素List<Element> childlist=root.elements();System.out.println("total child count:"+childlist.size());//获取特定名称的⼦元素List<Element> student=root.elements("student");System.out.println(student.size());for(Iterator it=student.iterator();it.hasNext();){Element studentele=(Element)it.next();String age=studentele.attributeValue("age");if(age!=null){System.out.println("<"+studentele.getName()+" "+"age="+studentele.attributeValue("age")+">"); }else{System.out.println("<"+studentele.getName()+">");}//取name的⽂本List<Element> names=studentele.elements("name");for(Iterator nameit=names.iterator();nameit.hasNext();){Element name=(Element)nameit.next();System.out.println("\t"+"name="+name.getText());}//取college的⽂本值List<Element> colleges=studentele.elements("college");for(Iterator collegeit=colleges.iterator();collegeit.hasNext();){Element college=(Element)collegeit.next();//判断有没有属性,如果有就取属性值isTextOnly()如果这个元素只有⽂本内容则返回trueString leader=college.attributeValue("leader");String text=college.getText();if(leader!=null){System.out.println("\t"+college.getName()+" "+"leader="+leader);}else{System.out.println("\t"+"college:"+college.getText());}}//获取telphone⽂本值List<Element> tel=studentele.elements("telphone");for(Iterator telit=tel.iterator();telit.hasNext();){Element telele=(Element) telit.next();System.out.println("\t"+"telphone:"+telele.getText());}//获取notes⽂本值List<Element> notes=studentele.elements("notes");for(Iterator noteit=notes.iterator();noteit.hasNext();){Element noteele=(Element) noteit.next();System.out.println("\tnoteele:"+noteele.getText());}}}// 保存public void saveXML(File tofile){// 以XML格式输出createPrettyPrint()创建默认的打印格式OutputFormat of=OutputFormat.createPrettyPrint();// 设置编码of.setEncoding("utf-8");try {// 以XML格式输出到dom4j.xml中XMLWriter writer=new XMLWriter(new FileOutputStream(tofile),of);// 把源树DOM树输出写进dom4j.xml中writer.write(document);writer.close();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// 修改XML元素public void updateEle(){//先要获取到age//得到根元素Element root=document.getRootElement();//得到 student元素List<Element> students=root.elements("student");// 修改<student age="25">的age属性为22for(Iterator stuit=students.iterator();stuit.hasNext();){Element stu=(Element) stuit.next();String age=stu.attributeValue("age");if(age!=null){//就是要替换的,修改属性值stu.attribute("age").setText("22");}// 修改<name>李四</name> 的name⽂本为sbList<Element> names=stu.elements("name");for(Iterator name=names.iterator();name.hasNext();){Element nameele=(Element) name.next();String nametext=nameele.getText();if(nametext.equals("李四")){//替换nameele.setText("sb");}}// 修改<college leader="leader">的leader值为否List<Element> colleges=stu.elements("college");for(Iterator collegeit=colleges.iterator();collegeit.hasNext();){Element college=(Element) collegeit.next();String leader=college.attributeValue("leader");if(leader!=null){//替换college.attribute("leader").setText("否");}}}}// 新增元素public void addEle(){/* <student ><name>杜和⾬</name><college leader="leader">PC学院</college></student>*/// 创建根节点Element root=document.getRootElement();// 创建student标签Element student=root.addElement("student");//创建student⼦标签nameElement name=student.addElement("name");//给name添加⽂本name.setText("杜和⾬");//创建student的⼦标签collegeElement college=student.addElement("college");//给college添加⽂本值college.addAttribute("leader", "big boss");}// 删除元素public void deleteEle(){/* <student ><name>李四</name><college leader="leader">PC学院</college><telphone>136********</telphone><notes>男,1983年⽣,硕⼠,现就读于中国农业⼤学</notes></student>*///得到根节点Element root=document.getRootElement();//找到 student节点List<Element> students=root.elements();//删除第1个student节点的所有⼦节点//students.remove(0);//删除college的属性leaderfor(Iterator<Element> stuit=students.iterator();stuit.hasNext();){ Element stu=stuit.next();List<Element> colleges=stu.elements();for(Iterator<Element> collit=colleges.iterator();collit.hasNext();){ Element coll=collit.next();String leader=coll.attributeValue("leader");if(leader!=null){coll.remove(coll.attribute("leader"));}}}}// 主函数,测试public static void main(String[] args){StudentDom4j sd=new StudentDom4j();File file=new File("student.xml");File tofile=new File("dom4j_student.xml");sd.getDom(file);sd.showXML(file);sd.updateEle();sd.addEle();sd.deleteEle();sd.saveXML(tofile);}}常⽤的⽅法真的要熟悉才⾏。
java使用dom4j解析xml文件
java使⽤dom4j解析xml⽂件关于xml的知识,及作⽤什么的就不说了,直接解释如何使⽤dom4j解析。
假如有如下xml:dom4j解析xml其实很简单,只要你有点java基础,知道xml⽂件。
结合下⾯的xml⽂件和java代码,多看⼏遍(代码很简单,不要嫌看代码烦),把他解析的过程看明⽩,就会很简单<?xml version="1.0" encoding="UTF-8"?><students><student><name type="String">aaa</name><age type="int">22</age></student><student><name type="String">bbb</name><age type="int">23</age></student><student><name type="String">ccc</name><age type="int">21</age></student></students>加⼊我们解析上⾯这个xml⽂件,⽆⾮是想得到其中的 name值,age值,有时候还需要type值使⽤到的类有:org.dom4j.io.SAXReader; --read 提供多种读取xml⽂件的⽅式,返回⼀个Domcument对象 org.dom4j.Document; --iterator 使⽤此法获取node --getRootElement 获取根节点 org.dom4j.Attribute; --getName 获取属性名 --getValue 获取属性值 org.dom4j.Element; --attributes 返回该元素的属性列表 --attributeValue 根据传⼊的属性名获取属性值 --elementIterator 返回包含⼦元素的迭代器 --elements 返回包含⼦元素的列表 下⾯看⼀下java代码public static void domxml() throws Exception {// SAXReader就是⼀个管道,⽤⼀个流的⽅式,把xml⽂件读出来SAXReader reader = new SAXReader();// read 提供多种读取xml⽂件的⽅式,返回⼀个Domcument对象Document document = reader.read(new File("F:" + File.separator + "student.xml"));// 获取根节点Element rootElement = document.getRootElement();System.out.println("根的名称:" + rootElement.getName());// 拿到根节点的名称Iterator iter = rootElement.elementIterator(); // 获取根节点下的⼦节点while (iter.hasNext()) {StringBuffer sb = new StringBuffer("");// ⼦节点Element nodeElement = (Element) iter.next();// System.out.println("-根下第⼀层节点名称:"+nodeElement.getName()+",值"+nodeElement.getText());sb.append("" + nodeElement.getName() + ":");// 节点属性Iterator i = nodeElement.elementIterator();while (i.hasNext()) {Element e = (Element) i.next();// System.out.println("--根下第⼆层节点名称:"+e.getName()+",节点值:"+e.getText());sb.append(e.getName() + "-" + e.getText() + ";");//遍历节点属性值List<Attribute> attr=e.attributes();for(Attribute a:attr){System.out.println("---节点属性:"+a.getName()+",属性值"+a.getText());}}System.out.println(sb);sb = null;}}如果你看明⽩了上⾯的代码,看懂了,你肯定会绝得这⾥嵌套了两个while,加⼊有三层的话,是不是得写三个while?不知道你看我上⾯的代码后有什么想法?反正我弄明⽩之后,⽴马就想到了改⽤递归写这个解析的⽅法,于是代码如下:public static void dgXml(Element element) {if (element.nodeCount() > 0) {// 还有⼦节点Iterator<?> it = element.elementIterator();while (it.hasNext()) {Element e = (Element) it.next();String name = e.getName();String value = e.getTextTrim().equals("")? "空": e.getTextTrim();System.out.print(name + "," + value+ ";Data[");if(e.attributeCount()>0){Iterator<?> ait=e.attributeIterator();while(ait.hasNext()){Attribute attribute = (Attribute) ait.next();System.out.print(attribute.getName()+"|"+attribute.getText()+";");}}System.out.println("]");dgXml(e);}}}。
dom4j读写xml文件
dom4j读写xml文件这篇文章是讲述关于dom4j解析xml文件的,可以作为学习xml解析的好例子。
首先我们给出一段示例程序:import java.io.File;import java.io.FileWriter;import java.util.Iterator;import org.dom4j.Document;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 DOM4JTest {/** *//** *//** *//*** DOM4J读写XML示例** @param args* @throws Exception*/public static void main(String[] args) {try {XMLWriter writer = null;// 声明写XML的对象SAXReader reader = new SAXReader();OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("GBK");// 设置XML文件的编码格式String filePath = "d:\\student.xml";File file = new File(filePath);if (file.exists()) {Document document = reader.read(file);// 读取XML文件Element root = document.getRootElement();// 得到根节点boolean bl = false;for (Iterator i = root.elementIterator("学生"); i.hasNext();) {Element student = (Element) i.next();if (student.attributeValue("sid").equals("001")) {// 修改学生sid=001的学生信息student.selectSingleNode("姓名").setText("王五");student.selectSingleNode("年龄").setText("25");writer = new XMLWriter(new FileWriter(filePath), format);writer.write(document);writer.close();bl = true;break;}}if (bl) {// 添加一个学生信息Element student = root.addElement("学生");student.addAttribute("sid", "100");Element sid = student.addElement("编号");sid.setText("100");Element name = student.addElement("姓名");name.setText("嘎嘎");Element sex = student.addElement("性别");sex.setText("男");Element age = student.addElement("年龄");age.setText("21");writer = new XMLWriter(new FileWriter(filePath), format);writer.write(document);writer.close();}} else {// 新建student.xml文件并新增内容Document _document = DocumentHelper.createDocument();Element _root = _document.addElement("学生信息");Element _student = _root.addElement("学生");_student.addAttribute("sid", "001");Element _id = _student.addElement("编号");_id.setText("001");Element _name = _student.addElement("姓名");_name.setText("灰机");Element _age = _student.addElement("年龄");_age.setText("18");writer = new XMLWriter(new FileWriter(file), format);writer.write(_document);writer.close();}System.out.println("操作结束! ");} catch (Exception e) {e.printStackTrace();}}}执行上面的java代码,结果如下:下面看一下循环解析节点:private void getAllNodes(String xml) {try {Document authtmp = DocumentHelper.parseText(xml);List<Element> list = authtmp.selectNodes("//sms/node");for (int j = 0; j < list.size(); j++) {Element node = (Element) list.get(j);nodeByNodes(node);}} catch (Exception e) {e.printStackTrace();}}private void nodeByNodes(Element node) {if (node.element("node") != null) {String id = node.attributeValue("id");String name = node.attributeValue("name");System.out.print(id + "-------");System.out.println(name);for (Iterator i = node.elementIterator("node"); i.hasNext();) {Element newNode = (Element) i.next();nodeByNodes(newNode);}} else {String id = node.attributeValue("id");String name = node.attributeValue("name");System.out.print(id + "-------");System.out.println(name);}}现在DOM4J的解释一.Document对象相关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.主动创建document对象.Document document = DocumentHelper.createDocument();Element root = document.addElement("members");// 创建根节点二.节点相关1.获取文档的根节点.Element rootElm = document.getRootElement();2.取得某节点的单个子节点.Element memberElm=root.element("member");// "member"是节点名3.取得节点的文字String text=memberElm.getText();也可以用:String text=root.elementText("name");这个是取得根节点下的name字节点的文字.4.取得某节点下名为"member"的所有字节点并进行遍历.List nodes = rootElm.elements("member");for (Iterator it = nodes.iterator(); it.hasNext();) {Element elm = (Element) it.next();// do something}5.对某节点下的所有子节点进行遍历.for(Iterator it=root.elementIterator();it.hasNext();){Element element = (Element) it.next();// do something}6.在某节点下添加子节点.Element ageElm = newMemberElm.addElement("age");7.设置节点文字.ageElm.setText("29");8.删除某节点.parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点9.添加一个CDATA节点.Element contentElm = infoElm.addElement("content");contentElm.addCDATA(diary.getContent());contentElm.getText(); // 特别说明:获取节点的CDATA值与获取节点的值是一个方法contentElm.clearContent(); //清除节点中的内容,CDATA亦可三.属性相关.1.取得某节点下的某属性Element root=document.getRootElement();Attribute attribute=root.attribute("size");// 属性名name2.取得属性的文字String text=attribute.getText();也可以用:String text2=root.element("name").attributeValue("firstname");这个是取得根节点下name字节点的属性firstname的值.3.遍历某节点的所有属性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.设置某节点的属性和文字.newMemberElm.addAttribute("name", "sitinspring");5.设置属性的文字Attribute attribute=root.attribute("name");attribute.setText("sitinspring");6.删除某属性Attribute attribute=root.attribute("size");// 属性名nameroot.remove(attribute);四.将文档写入XML文件.1.文档中全为英文,不设置编码,直接写入的形式.XMLWriter writer = new XMLWriter(newFileWriter("output.xml"));writer.write(document);writer.close();2.文档中含有中文,设置编码格式写入的形式.OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("GBK"); // 指定XML编码XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);writer.write(document);writer.close();五.字符串与XML的转换1.将字符串转化为XMLString text = "<members> <member>sitinspring</member> </members>"; Document document = DocumentHelper.parseText(text);2.将文档或节点的XML转化为字符串.SAXReader reader = new SAXReader();Document document = reader.read(newFile("input.xml"));Element root=document.getRootElement(); String docXmlText=document.asXML();String rootXmlText=root.asXML();Element memberElm=root.element("member");String memberXmlText=memberElm.asXML();。
Dom4j解析xml内容——(三)
Dom4j解析xml内容——(三)Dom4j取标签中的内容⽤ getText ,取开始标签和结束标签之间的值。
取属性值有两种⽅式:Jar包:XML原型:<?xml version="1.0" encoding="utf-8"?><书架><书><书名>Java⾼级</书名><作者>武陟县</作者><价格>200元</价格></书><书><书名 name="xxxxxxxxxxx">Java中级</书名><作者>打⽕机</作者><价格>2000元</价格></书></书架>Java类1package Dom4j_XMLParser;23import java.io.File;45import org.dom4j.Attribute;6import org.dom4j.Document;7import org.dom4j.DocumentException;8import org.dom4j.Element;9import org.dom4j.io.SAXReader;10import org.junit.Test;1112public class Demo1 {1314// 获取第⼆本书的书名15 @Test16public void test1() throws Exception {17// 创建SAX读取器18 SAXReader reader = new SAXReader();19// 加载⽂档20 Document document = reader.read(new File("src/book.xml"));21// 获取根节点(书架)22 Element root = document.getRootElement();23// 获取根节点下的书节点,带s返回⼀个数组,再取数组的第⼆个24 Element book = (Element) root.elements("书").get(1);25// 获取树下⾯的书名属性26 Element shuming = book.element("书名");27// 获取书名开始标签与结束标签之间的值28 String value = shuming.getText();29 System.out.println(value);3031 }323334// 获取第⼆本书的书名中的属性 <书名 name="xxxxxxxxxxx">Java中级</书名> 35 @Test36public void test2() throws Exception {37 SAXReader reader = new SAXReader();38 Document document = reader.read(new File("src/book.xml"));39 Element root = document.getRootElement();4041 Element book = (Element) root.elements("书").get(1);42 Element shuming = book.element("书名");4344// 第⼀中⽅法45// 获取name属性46 Attribute attribute = shuming.attribute("name");47// 获取name属性的值48 String attrValue = attribute.getValue();49// 获取书名开始标签与结束标签之间的值50 System.out.println(attrValue); //xxxxxxxxx5152// 第⼆种⽅法(获取书名节点的name属性的值)53 System.out.println(shuming.attributeValue("name")); //xxxxxxxx5455 }56 }。
Dom4j_SAXReader(XML读取)
1.新建项目2.导入dom4j的jar包3.编写xml文件catalog.xmlMarcelloVitaletti三张4.编写xmlReader.javapackage com.xml.dom4j;import java.io.File;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class XMLReader {public void read(String fileName) throws DocumentException{File xmlFile = new File(fileName);read(xmlFile);}@SuppressWarnings("unchecked")public void read(File xmlFile) throws DocumentException{//使用SAX方式解析xmlSAXReader saxReader = new SAXReader();//把xml文件转换成文档对象Document document = saxReader.read(xmlFile);//取得根节点Element rootNode = document.getRootElement();//取得根节点的名字System.out.println("根节点名称: "+rootNode.getName());//取得所有的二级(下一级)子节点List secondList = rootNode.elements();readsecondLevelElement(secondList);}@SuppressWarnings("unchecked")public void readsecondLevelElement( List secondList){for(Element secondElement : secondList){System.out.println(" \t二级节点名称:"+secondElement.getName());//取得所有的二级子节点的属性System.out.println(" \t 属性title:"+secondElement.attributeva lue("title")+" 属性publisher:"+secondElement.attributeva lue("publisher"));//取得所有的三级(下一级)子节点List thirdList = secondElement.elements();readThirdLevelElement(thirdList);}}@SuppressWarnings("unchecked")public void readThirdLevelElement( List thirdList){for(Element thirdElement : thirdList){System.out.println(" \t\t三级节点名称:"+thirdElement.getName());//取得所有的三级子节点的属性System.out.println(" \t\t 属性level:"+thirdElement.attributeva lue("level")+" 属性date:"+thirdElement.attributeva lue("date"));//取得所有的四级(下一级)子节点List fourList = thirdElement.elements();readFourLevelElement(fourList);}}//读取四级元素的方法public void readFourLevelElement( List fourList){for(Element fourElement : fourList){System.out.println(" \t\t\t四级节点名称:"+fourElement.getName());if(fourElement.getName().equals("title")){System.out.println(" \t\t\t 四级节点内容:"+fourElement.getText());}else if(fourElement.getName().equals("author")){//fourElement.element("firstname") 通过名字取得firstname节点System.out.println(" \t\t\t\t五级级节点内容:"+fourElement.element("firstname").getName()); System.out.println(" \t\t\t\t 五级节点内容:"+fourElement.element("firstname").getText()); System.out.println(" \t\t\t\t五级级节点内容:"+fourElement.element("lastname").getName()); System.out.println(" \t\t\t\t 五级节点内容:"+fourElement.element("lastname").getText());}}}}5.编写测试类@Testpublic void testRead() {try {String file = "F:/students/dom4j_XML/src/catalog.xml";XMLReader reader = new XMLReader();reader.read(file);} catch (DocumentException e) {}}6.项目结构:7.要点说明:使用dom4j方式解析xml:1.指定要解析的文件File xmlFile = new File(fileName);2.选择xml解析方式//使用SAX方式解析xmlSAXReader saxReader = new SAXReader();3.解析xml文件//把xml文件转换成文档对象Document document = saxReader.read(xmlFile);4.解析文档对象dom对象//取得根节点Element rootNode = document.getRootElement(); //取得所有的下一级节点List secondList = rootNode.elements();//根据名字取的子节点fourElement.element("firstname")//根据名字取的子节点,和节点内容fourElement.element("firstname").getText()//根据名字取的节点属性值thirdElement.attributeva lue("level")。
使用dom4j解析xml文件
使⽤dom4j解析xml⽂件使⽤dom4j解析xml⽂件2017-09-12⽬录xml源⽂件<?xml version="1.0" encoding="GB2312" ?><PhoneInfo><Brand name="华为"><Type name="P9"/></Brand><Brand name="苹果"><Type name="iphone5"/><Type name="iphone6"/></Brand></PhoneInfo>代码:import java.io.FileWriter;import java.io.IOException;import java.io.Writer;import java.util.Iterator;import org.dom4j.*;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class Dom4jTest {Document dom = null;public static void main(String[] args) {Dom4jTest dom4j = new Dom4jTest();//获得Dom树dom4j.getDom();//添加新的节点dom4j.addNode();//更改元素属性dom4j.modify();//更改三星属性dom4j.modifySan();//删除节点dom4j.delete();//保存xml⽂件dom4j.saveXml("⼿机信息.xml");//显⽰xml⽂件dom4j.showInfo();}// 获得dom树public void getDom() {//通过reader获得Dom树SAXReader reader = new SAXReader();try {dom = reader.read("收藏信息.xml");} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 保存xml⽂件public void saveXml(String path) {//设置编码格式//可以直接使⽤⽆参构造,效果也⼀样//OutputFormat encoding=new OutputFormat();OutputFormat encoding = OutputFormat.createPrettyPrint(); encoding.setEncoding("gb2312");Writer writer = null;try {writer = new FileWriter(path);//使⽤XMLWriter类进⾏dom树的输出XMLWriter writerXml = new XMLWriter(writer, encoding);//使⽤Write()进⾏dom树的写writerXml.write(dom);//最后关闭相关流writerXml.close();writer.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// 显⽰xml⽂件信息public void showInfo() {//获得dom树的根节点Element BrandElements = dom.getRootElement();//获得元素的Iterator集合Iterator elementIterator = BrandElements.elementIterator();//对Interator集合进⾏遍历while (elementIterator.hasNext()) {Element brandElement = (Element) elementIterator.next();//获得元素的属性String brand = brandElement.attributeValue("name");//继续从上⼀个节点获得下⼀节点Iterator集合Iterator typeElements = brandElement.elementIterator();while (typeElements.hasNext()) {Element typeElement = (Element) typeElements.next(); String type = typeElement.attributeValue("name");System.out.println("⼿机:" + brand + ",型号" + type); }}}// 添加节点public void addNode() {//获得根节点Element Root = dom.getRootElement();//添加Brand元素Element brand = Root.addElement("Brand");//为Brand元素添加属性brand.addAttribute("name", "三星");//继续在新加元素添加Type元素Element type = brand.addElement("Type");//为Type元素添加属性type.addAttribute("name", "note");}// 修改属性,添加ID属性public void modify() {Element root = dom.getRootElement();Iterator elementIterator = root.elementIterator();int i = 0;while (elementIterator.hasNext()) {Element brand = (Element) elementIterator.next();brand.addAttribute("id", (++i) + "");}}//修改三星为SAMSUNGpublic void modifySan() {Element rootElement = dom.getRootElement();Iterator elementIterator = rootElement.elementIterator();while (elementIterator.hasNext()) {Element brand = (Element) elementIterator.next();if (brand.attributeValue("name").equals("三星")) {brand.addAttribute("name", "SAMSUNG");}}// 删除SAMSUNG元素public void delete() {Element rootElement = dom.getRootElement();Iterator elementIterator = rootElement.elementIterator();while (elementIterator.hasNext()) {Element brand = (Element) elementIterator.next();if (brand.attributeValue("name").equals("SAMSUNG")) { brand.getParent().remove(brand);}}}}。
java中利用dom4j解析XML文件
java中利⽤dom4j解析XML⽂件官⽹下载Dom4j地址:注意:使⽤Dom4j开发,需下载dom4j相应的jar⽂件题⽬:后台利⽤dom4j解析student.xml⽂件,并返回List<Student>集合需要解析的XML:<?xml version="1.0" encoding="UTF-8"?><classes><class name="ST01"><student id="10001">user1</student><student id="10002">user2</student><student id="10003">user3</student></class><class name="ST02"><student id="10004">user4</student><student id="10005">user5</student><student id="10006">user6</student></class><class name="ST03"><student id="10007">user7</student><student id="10008">user8</student><student id="10009">user9</student></class><class name="ST04"><student id="10010">user10</student><student id="10011">user12</student><student id="10012">user13</student></class><class name="ST05"><student id="10013">user14</student><student id="10014">user15</student><student id="10015">user16</student></class></classes>java解析xml代码:/*** @author hh*/public class XmlUtil {/*** 读取xml学⽣列表信息* @return*/public List<Student> listStudent(){//创建SAXReader对象SAXReader reader=new SAXReader();Document document = null;try {//通过read⽅法读取⼀个⽂件转换成Document对象document = reader.read(new File("/Users/mac/Documents/students.xml"));} catch (DocumentException e) {e.printStackTrace();}//获取根节点元素对象Element node = document.getRootElement();return elementMethod(node);}/*** 获取节点中的信息* @param node* @return*/private List<Student> elementMethod(Element node){List<Student> list = new ArrayList<Student>();//获取所有class 节点List<Element> elementClass = node.elements("class");for (Element aClass : elementClass) {//获取所有student节点List<Element> elelmentStu=aClass.elements("student");for (Element element : elelmentStu) {//创建学⽣对象Student stu = new Student();//class节点⾥name的值stu.setSclazz(aClass.attribute("name").getValue());//student节点⾥ID的值stu.setSid(element.attribute("id").getValue());//student节点⾥的String值stu.setSname(element.getStringValue());list.add(stu);}}return list;}}实体类:/*** @author hh*/public class Student {private String sname;private String sid;private String sclazz;public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public String getSid() {return sid;}public void setSid(String sid) {this.sid = sid;}public String getSclazz() {return sclazz;}public void setSclazz(String sclazz) {this.sclazz = sclazz;}@Overridepublic String toString() {return "Student{" +"sname='" + sname + '\'' +", sid='" + sid + '\'' +", sclazz='" + sclazz + '\'' +'}';}}View Code@Test 代码:public class StudentDaoTest {@Testpublic void testlistStudent(){List<Student> list = new XmlUtil().listStudent();for (Student student : list) {System.out.println(student);}}}View Code运⾏结果:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Document document = DocumentHelper.createDocument();//
Element elementRoot = (Element) list.iterator().next();
}
}
}
经过测试,本例子可以正常运行。
cldTitleElement.setText(nodeTitle.getText());//
Element cldLinkElement = itemElement.addElement("link");
cldLinkElement.setText(nodeLink.getText());
Element pubDateElement = itemElement.addElement("pubDate");
Element idElement = itemElement.addElement("id");
idElement.setText(nodeId.getText());
Element descriptionEnt("description");
Element element = (Element) iter.next();
Node nodeTitle = element.selectSingleNode(Constant.RSS_DOM_CHILDREN_ROOT_TITLE);
Node nodeLink = element.selectSingleNode(Constant.RSS_DOM_CHILDREN_ROOT_LINK);
catalogElement.addComment("An XML Catalog");
catalogElement.addProcessingInstruction("target","text");
Element journalElement = catalogElement.addElement("journal");
dom4j.generateDocument();
}
}
三。Xmlparse.java文件:
importjava.io.File;
importjava.io.FileWriter;
importjava.io.IOException;
.URL;
importjava.text.SimpleDateFormat;
public class XmlDom4J{
public void generateDocument(){
Document document = DocumentHelper.createDocument();
Element catalogElement = document.addElement("catalog");
一。Constant.java文件:
publicclassConstant {
publicstaticStringRSS_DOM_ROOT_TITLE="//channel/title";
publicstaticStringRSS_DOM_ROOT_LINK="//channel/link";
publicstaticStringRSS_DOM_CHILDREN_ROOT="//channel/item";
Node nodepubDate = element.selectSingleNode(Constant.RSS_DOM_CHILDREN_ROOT_PUBDATE);
Node nodeType = element.selectSingleNode(Constant.RSS_DOM_CHILDREN_ROOT_TYPE);
//System.out.println(element.attributeValue("version")); //获取版本
Element itemElement = channelElement.addElement("item");
Element cldTitleElement = itemElement.addElement("title");
journalElement.addAttribute("title", "XML Zone");
journalElement.addAttribute("publisher", "IBM developerWorks");
Element articleElement=journalElement.addElement("article");
publicstaticStringRSS_DOM_CHILDREN_ROOT_TYPE="type";
publicstaticStringRSS_DOM_CHILDREN_ROOT_ID="id";
publicstaticStringRSS_DOM_CHILDREN_ROOT_DESCRIPTION="description";
importjava.util.Date;
importjava.util.Iterator;
importjava.util.List;
importorg.dom4j.Document;
importorg.dom4j.DocumentHelper;
importorg.dom4j.Element;
importorg.dom4j.Node;
pubDateElement.setText(nodepubDate.getText());
try{
Element typeElement = itemElement.addElement("type");
typeElement.setText(nodeType.getText());
}catch(NullPointerException e){}
}
二。XmlDom4J.java文件:
//写入文件d:/qqq.xml
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;
import java.io.*;
Element channelElement = document.addElement("channel");
Element titleElement = channelElement.addElement("title");
titleElement.setText(nodeRootTitle.getText());//
titleElement.setText("Java configuration with XML Schema");
Element authorElement=articleElement.addElement("author");
Element firstNameElement=authorElement.addElement("firstname");
publicstaticStringRSS_DOM_CHILDREN_ROOT_TITLE="title";
publicstaticStringRSS_DOM_CHILDREN_ROOT_LINK="link";
publicstaticStringRSS_DOM_CHILDREN_ROOT_PUBDATE="pubDate";
Node nodeId = element.selectSingleNode(Constant.RSS_DOM_CHILDREN_ROOT_ID);
Node nodeDescription = element.selectSingleNode(Constant.RSS_DOM_CHILDREN_ROOT_DESCRIPTION);
output.write( document );
output.close();
}
catch(IOException e){
System.out.println(e.getMessage());
}
}
public static void main(String[] args){
XmlDom4J dom4j=new XmlDom4J();
Node nodeRootTitle = elementRoot.selectSingleNode(Constant.RSS_DOM_ROOT_TITLE);
Node nodeRootLink = elementRoot.selectSingleNode(Constant.RSS_DOM_ROOT_LINK);
importorg.dom4j.io.XMLWriter;
publicclassXmlparse {
/**
*@paramargs
*/
publicstaticvoidmain(String[] args) {
XmlUtils xu =newXmlUtils();
URL url;