最简单而强大读写xml的方法(DOM4J经典API)(学习自用备份)

合集下载

java读取XML文件的四种方法总结(必看篇)

java读取XML文件的四种方法总结(必看篇)

java读取XML⽂件的四种⽅法总结(必看篇)JAVA操作XML⽂档主要有四种⽅式,分别是DOM、SAX、JDOM和DOM4J,DOM和SAX是官⽅提供的,⽽JDOM和DOM4J 则是引⽤第三⽅库的,其中⽤的最多的是DOM4J⽅式。

运⾏效率和内存使⽤⽅⾯最优的是SAX,但是由于SAX是基于事件的⽅式,所以SAX⽆法在编写XML的过程中对已编写内容进⾏修改,但对于不⽤进⾏频繁修改的需求,还是应该选择使⽤SAX。

下⾯基于这四种⽅式来读取XML⽂件。

第⼀,以DOM的⽅式实现。

package xmls;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import java.io.File;import java.io.IOException;/*** Created by lenovo on 2017-6-3.*/public class DOMReadDemo {public static void main(String[] args){DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();try{DocumentBuilder db = dbf.newDocumentBuilder();Document document = db.parse("src/xmls/DOM.xml");NodeList booklist = document.getElementsByTagName("book");for(int i = 0; i < booklist.getLength(); i++){System.out.println("--------第" + (i+1) + "本书----------");Element ele = (Element) booklist.item(i);NodeList childNodes= ele.getChildNodes();for(int j = 0; j < childNodes.getLength(); j++){Node n = childNodes.item(j);if(n.getNodeName() != "#text"){System.out.println(n.getNodeName() + ":" + n.getTextContent());}}System.out.println("---------------------------------");}}catch (ParserConfigurationException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}catch (SAXException e){e.printStackTrace();}}}第⼆,以SAX的⽅式实现。

Dom4j_SAXReader(XML读取)

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⽂件最近在⼀些对xml⽂件的操作,下⾯简单写⼀个dom4j解析xml⽂件并将其封装到⼀个javabean中的例⼦,只是具有针对性的,不是通⽤的,仅供参考哦~~⾸先说:dom4j是⼀个java的XML api,性能优异、功能强⼤、易于使⽤。

使⽤dom4j对xml⽂件进⾏解析,并完成对⽂件的封装。

接下来,主要使⽤到的是dom4j中的SAXReader类,在这⾥我的流程是传⼊⼀个xml⽂件,调⽤写好的的⼯具类,完成对xml⽂件的解析。

xml⽂件如下:1<?xml version="1.0" encoding="UTF-8"?>23<school>45<college name="数学">6<class name="1612A" classroom="36306">7<student>8<property name="name" value="张三"></property>9<property name="age" value="23"></property>10<property name="garden" value="男"></property>11</student>12<student>13<property name="name" value="李四"></property>14<property name="age" value="22"></property>15<property name="garden" value="⼥"></property>16</student>17<student>18<property name="name" value="王五"></property>19<property name="age" value="24"></property>20<property name="garden" value="男"></property>21</student>22</class>23</college>2425<college name="英语">26<class name="1612C" classroom="35108">27<student>28<property name="name" value="赵六"></property>29<property name="age" value="21"></property>30<property name="garden" value="男"></property>31</student>32<student>33<property name="name" value="陈七"></property>34<property name="age" value="22"></property>35<property name="garden" value="男"></property>36</student>37<student>38<property name="name" value="郭⼋"></property>39<property name="age" value="25"></property>40<property name="garden" value="男"></property>41</student>42<student>43<property name="name" value="孙九"></property>44<property name="age" value="20"></property>45<property name="garden" value="⼥"></property>46</student>47</class>48</college>4950</school>Junit 测试如下:1public class Dom4jTest {23 @Test4public void test() throws Exception{567 File xmlFile = new File("⽂件位置");8// 调⽤⼯具类返回学⽣集合9 List<Student> studentList = XMLUtil.fileTransferList(xmlFile);1011for (Student student : studentList) {1213 System.out.println("-------------------------");14 System.out.println("姓名:"+student.getName());15 System.out.println("年龄:"+student.getAge());16 System.out.println("性别:"+student.getGarden());1718 }1920 }2122 }⼯具类如下:1public class XMLUtil {23public static List<Student> fileTransferList(File file) throws DocumentException{45// 返回值:学⽣信息集合6 List<Student> studentList=new ArrayList<Student>();78// 创建saxReader对象9 SAXReader reader = new SAXReader();1011// 通过read⽅法读取⼀个⽂件转换成Document对象12 Document document = reader.read(file);1314//获取根节点元素对象15 Element root = document.getRootElement();1617// 获取学院节点集合18 List<Element> collegeElements = root.elements();1920//已知属性名情况下21for (Element college : collegeElements) {2223 List<Student> collegeStudentList = getStudentListFromCollegeElement(college);2425 studentList.addAll(collegeStudentList);26 }2728return studentList;29 }3031private static List<Student> getStudentListFromCollegeElement(Element collegeElement){3233// 返回值:学⽣信息集合34 List<Student> studentList = new ArrayList<Student>();3536 List<Element> classElements = collegeElement.elements();3738for (Element classElement : classElements) {3940 List<Student> classStudentList = getStudentListFromClassElement(classElement);4142 studentList.addAll(classStudentList);43 }4445return studentList;4647 }4849private static List<Student> getStudentListFromClassElement(Element classElement){5051// 返回值:学⽣信息集合52 List<Student> studentList = new ArrayList<Student>();5354 List<Element> studentElements = classElement.elements();5556for (Element student : studentElements) {5758 List<Element> propertyElements = student.elements();5960 Student student2 = studentElementTransferStudentEntity(propertyElements);6162 studentList.add(student2);63 }6465return studentList;66 }6768private static Student studentElementTransferStudentEntity(List<Element> propertyElements){ 6970 Student stu = new Student();7172for (Element property : propertyElements) {7374 String name = property.attributeValue("name");75 String value = property.attributeValue("value");7677if("name".equals(name)){78 stu.setName(value);79 }80if("age".equals(name)){81 stu.setAge(value);82 }83if("garden".equals(name)){84 stu.setGarden(value);85 }86 }8788return stu;89 }9091 }最后呢,当然是显⽰结果了~~结果如下:到此结束了,以后也许有有其他解析的⽅法,也希望各位同道⼀块学习~~。

Dom4j使用Xpath语法读取xml节点

Dom4j使用Xpath语法读取xml节点

Dom4j使⽤Xpath语法读取xml节点<span style="font-size: small;" mce_style="font-size: small;">package com.wt.dom4j;import java.util.List;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;/*** Dom4j基础操作** @author wTang* @editTime 2011年3⽉16⽇0:38:10**/public class Dom4jParser {public static void main(String[] args) {try {SAXReader sax = new SAXReader();// 获得dom4j的⽂档对象Document root = sax.read(Dom4jParser.class.getClassLoader().getResourceAsStream("employee.xml"));// 得到database节点Element database = (Element) root.selectSingleNode("//employee[@id='2']");List list = database.elements(); // 得到database元素下的⼦元素集合/** 循环遍历集合中的每⼀个元素将每⼀个元素的元素名和值在控制台中打印出来*/for (Object obj : list) {Element element = (Element) obj;// getName()是元素名,getText()是元素值System.out.println(element.getName() + ": " + element.getText());}} catch (Exception e) {e.printStackTrace();}}}</span>表达式:Element database = (Element) root.selectSingleNode("//employee[@id='2']");输出为:name: wTang2age: 20high: 180表达式: Element database = (Element) root.selectSingleNode("/root/employee[1]");输出为:name: wTangage: 19high: 173我们可以给id⾥⾯的值做个参数, 封装为⽅法即可给外界调⽤.// 表⽰从匹配选择的当前节点选择⽂档中的节点,⽽不考虑它们的位置。

Java XML解析工具 dom4j介绍及使用实例

Java XML解析工具 dom4j介绍及使用实例

dom4j介绍dom4j的项目地址:/projects/dom4j/?source=directorydom4j是一个简单的开源库,用于处理XML、XPath和XSLT,它基于Java 平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。

dom4j的使用下载了dom4j项目之后,解压缩,将其jar包(我的当前版本叫做dom4j-1.6.1.jar)加入class path下面。

(Properties->Java Build Path -> Add External JARs...)。

之后就可以使用其提供的API进行编程。

程序实例1第一个程序,用Java代码生成xml文档,代码如下:package com.example.xml.dom4j;import java.io.FileOutputStream;import java.io.FileWriter;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;/*** dom4j框架学习使用dom4j框架创建xml文档并输出保存**/public class Dom4JTest1{public static void main(String[] args) throws Exception{// 第一种方式:创建文档,并创建根元素// 创建文档:使用了一个Helper类Document document = DocumentHelper.createDocument();// 创建根节点并添加进文档Element root = DocumentHelper.createElement("student");document.setRootElement(root);// 第二种方式:创建文档并设置文档的根元素节点Element root2 = DocumentHelper.createElement("student");Document document2 = DocumentHelper.createDocument(root2);// 添加属性root2.addAttribute("name", "zhangsan");// 添加子节点:add之后就返回这个元素Element helloElement = root2.addElement("hello");Element worldElement = root2.addElement("world");helloElement.setText("hello Text");worldElement.setText("world text");// 输出// 输出到控制台XMLWriter xmlWriter = new XMLWriter();xmlWriter.write(document);// 输出到文件// 格式OutputFormat format = new OutputFormat(" ", true);// 设置缩进为4个空格,并且另起一行为trueXMLWriter xmlWriter2 = new XMLWriter(new FileOutputStream("student.xml"), format);xmlWriter2.write(document2);// 另一种输出方式,记得要调用flush()方法,否则输出的文件中显示空白XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("student2.xml"),format);xmlWriter3.write(document2);xmlWriter3.flush();// close()方法也可以}}程序Console输出:<?xml version="1.0" encoding="UTF-8"?><student/>生成的一个xml文档:<?xml version="1.0" encoding="UTF-8"?><student name="zhangsan"><hello>hello Text</hello><world>world text</world></student>程序实例2程序实例2,读入xml文档并分析,将其内容输出。

Dom4j解析XML文档

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.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是其父节点三.属性相关.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();}}级别:初级Deepak Vohra (dvohra09@), Web 开发人员2004 年4 月01 日dom4j 是一种解析XML 文档的开放源代码XML 框架。

如何用DOM4J解析XML

如何用DOM4J解析XML

如何⽤DOM4J解析XML认识XML XML是Extensible Markup Language 即可扩展标记语⾔的缩写,是⼀种简单的数据储存语⾔,使⽤⼀系列简单的标记来描述数据<element_name attribute_name="value" .../> // ⾃闭合<element_name attribute_name="value" ...> //对1-String2-<element_name attribute_name="value" .../>3-<element_name attribute_name="value" .../>...</element_name></element_name> 对XML的四种解析  ⽬前常⽤的XML解析技术有4种:(1)DOM DOM是基于XML的树结构来完成解析的,DOM解析XML的⽅式⾮常适⽤于多次访问XML的应⽤程序,但是其⽐较消耗资源;(2)SAX SAX是⼀种基于事件的解析,其主要是为了解决DOM解析的资源消耗问题⽽出现的,其优势是占⽤资源少,内存消耗⼩,⼀般在处理解析数据量⼤的XML⽂档才会使⽤(3)JDOM JDOM的⽬的是直接为JAVA编程服务,利⽤纯Java技术对XML⽂档实现解析⽣成,序列化以及其他操作;(4)DOM4J DOM4J具有性能优异、功能强⼤和易⽤的特点,同时它也是⼀个开放源代码的软件如何⽤DOM4J解析XML数据注:使⽤DOM4J解析XML,依赖于jar包 dom4j和jaxen 实现的步骤: 指定要解析的XML⽂件; 把XML⽂件转换成Document对象; 获取节点属性或⽂本的值。

File xml = new File("xmlfiles/xxx");SAXReader reader = new SAXReader();Document doc = reader.read(xml);//转换为⽂件Element root = doc.getRootElement();//获取节点属性List<Element> elements = root.elements(); //element 节点下⾯举⼀例分别分析xml⽂档 xml⽂档内容如下<?xml version="1.0" encoding="UTF-8"?><root><student id="1"><name>张飞</name><age>999</age><gender>男</gender></student><student id="2"><name>关⽻</name><age>888</age><gender>男</gender></student><student id="3"><name>刘备</name><age>777</age><gender>男</gender></student></root>若要读取XML⽂档中,可以直接⽤字符串输出的⽅式遍历,⾸先获取⼦元素,再遍历⼦元素⽂本//字符串输出for (Element element : elements) {String id = element.attributeValue("id");//获取当前指定⼦元素System.out.print(id+"\t");List<Element> subEs = element.elements();for (Element subE : subEs) {System.out.print(subE.getText()+"\t");//获取当前⼦元素⽂本}System.out.println("\n");}对于⼀个XML⽂档,我们也许需要检索所有的内容,但有时也可能需要检索某⼀固定节点或某⼀个属性,因此我们需要采取不同的检索⽅式 (1)当我们需要检索所有内容时,可以⽤动态数组的形式遍历出来即可; (2)当需要检索某⼀固定节点 Node node = document.selectSingleNode("//nodeName[@attrName = value]"); (3)检索某⼀属性(多节点检索) List<Element> = document.selecNodes("//nodeName[subEleName/text()='value']"); 取⼀分析结果,输出如下//检索固定节点Node node = doc.selectSingleNode("//student[@id=3]");//任意以student为根的节点if (null != node){Element element =(Element)node;String id = element.attributeValue("id");String name = element.elementText("name");String age = element.elementText("age");String gender = element.elementText("gender");Student student = new Student(Integer.parseInt(id),name,Integer.parseInt(age),gender);System.out.println(student);}当我们需要对XML⽂件进⾏改动时,有三种情况分别为新增、删除以及修改(变动过之后必须落盘) (1)新增 Element ele = root.addElement(...); Element subEle = ele.addElement(String nodeName); (2)删除 Element xxx = ... father.renmove(xxx); (3)修改 xxx.attribute(String attrName).setValue(String value); xxx.element(String subName).setText(String text); 下⾯例⼦为删除操作//删除//内存操作Node node = doc.selectSingleNode("//xxx[@id=3]");if (null != node){root.remove(node);//存盘OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("xmlfiles/kb.xml"),"UTF-8"),format);writer.write(doc);writer.flush();writer.close();}else {System.out.println("⽤户不存在");}。

dom4j操作xml

dom4j操作xml
s1.addElement("姓名").addText("张三") ;
s1.addElement("性别").addText("男") ;
Element s2 = root.addElement("学生2") ;
s2.addAttribute("id", "002") ;
s2.addElement("姓名").addText("李四") ;
e.remove(e.element("年龄")) ;
break;
}
}
OutputFormat format =newOutputFormat().createPrettyPrint() ;
format.setEncoding("GB2312") ;
XMLWriter writer =newXMLWriter(newFileWriter(path),format) ;
break ;
}
}
writer = new XMLWriter(new FileWriter(path),formart) ;
writer.write(doc) ;
writer.close() ;
} catch (Exception e) {
e.printStackTrace();
}
}
5.添加一个Element
format.setEncoding("GB2312") ;
XMLWriter writer = new XMLWriter(new FileWriter(path),format) ;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//得到文档对象
Document doc =null;
try{
//指定编码,避免出现
InputStream isr =newFileInputStream (newFile ("class.xml"));
doc = reader.read(newInputStreamReader(isr,"GBK"));
XMLWriter out2 =newXMLWriter(out1,format);//指定格式
out2.write(doc);
out2.close();
}
}
修改文件
/**
*任务描述:将下面class.xml中id=02的节点中的文本改为“项目二部”,teacher改为“带头大哥”
<?xml version="1.0" encoding="GBK"?>
</root>
*/
packagechapter12.dom4j;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileWriter;
importjava.io.InputStream;
importjava.io.InputStreamReader;
for(inti = 0; i < listClass.size(); i++) {
//获取当前节点
Element ele = listClass.get(i);
//获取当前节点的名称和文本
sb.append(ele.getName() +"="+ ele.getText());
//获取属性值
sb.append(" id = "+ele.valueOf("@id"));
使用
重要说明
根据网上资料,目前DOM4j的功能最简单,最强大。JAXP、JDOM、DOM4j各种技术试一篇,觉得确实如此。所以隆重推荐本文。
所有代码全部可以运行,并且解决了读取xml时一个比较麻烦的异常:
org.dom4j.DocumentException: Error on line 1 of document Nested exception:
//创建文档对象
Document doc = DocumentHelper.createDocument();
//创建根节点<lovo></lovo>
Element root = doc.addElement("root");
//增加属性节点<root year="2008"></root>
root.addAttribute("year","2008");
sb.append(" teacher = "+ele.valueOf("@teacher"));
//获取父节点(文本、属性……)
sb.append(" year"+"="+ ele.getParent().valueOf("@year")+" \r");
}
System.out.println(sb.toString());
root.addElement("boss").addText("带头大哥");
//增加带属性和文本的子节点<class id="01" teacher="张三">一班</class>
root.addElement("class").addAttribute("id","01").addAttribute("teacher","张三").addText("一班");
e.printStackTrace();
}
//获取根节点
Element eleRoot = doc.getRootElement();
System.out.println("根节点:"+eleRoot.getName());
//lt;Element> listClass = doc.selectNodes("//root/class");
isr.close();
}catch(DocumentException e) {
e.printStackTrace();
}
//使用XPATH表达式获得节点列表
List<Element> list = doc.selectNodes("//root/class");
//创建一个迭代器.
for(Element ele:list){
//保存(指定编码)
FileWriter out1 =newFileWriter("class.xml");
OutputFormat format = OutputFormat.createPrettyPrint();//createCompactFormat,createPrettyPrint
format.setEncoding("GBK");
<root year="2008">
<boss>带头大哥</boss>
<class id="01" teacher="张三">一班</class>
<class id="02" teacher="李四">二班</class>
<class id="03" teacher="张三丰">三班</class>
}
}
读文件示例:
/**
*读取class.xml,内容如下:
<?xml version="1.0" encoding="GBK"?>
<root year="2008">
<boss>带头大哥</boss>
<class id="01" teacher="张三">一班</class>
<class id="02" teacher="李四">二班</class>
publicclassReadDemo {
publicstaticvoidmain(String[] args)throwsException {
StringBuffer sb =newStringBuffer();
SAXReader reader =newSAXReader();
//得到文档对象
Document doc =null;
org.xml.sax.SAXParseException: Invalid encoding name "GBK".
项目所需jar包见:/blog/251276
本文档包含四个部分:
写XML示例
修改XML
读XML示例
任务描述:使用递归,完成对任何xml文件的读取
//}
//使用JDK1.5中的for each循环完成上面代码的功能(对比学习)
for(Attribute att:list){
System.out.println(att.getName()+"="+att.getValue());
}
}
}
递归
/**
*任务描述:使用递归,完成对任何xml文件的读取
*/
teacher=张三
teacher=李四
teacher=张三丰
*/
packagechapter12.dom4j;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importorg.dom4j.DocumentHelper;
importorg.dom4j.Element;
importorg.dom4j.io.OutputFormat;
importorg.dom4j.io.XMLWriter;
publicclassWriteDemo {
publicstaticvoidmain(String[] args)throwsException {
String id = ele.valueOf("@id");
if(id!=null&& id.equals("02")){
ele.setText("项目二部");
ele.setAttributeValue("teacher","带头大哥");
}
}
//保存(指定编码)
FileWriter out1 =newFileWriter("class.xml");
<class id="02" teacher="李四">二班</class>
相关文档
最新文档