最简单而强大读写xml的方法(DOM4J经典API)(学习自用备份)
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读取)
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⽂件最近在⼀些对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节点<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介绍及使用实例
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包,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认识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
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) ;
读写XML的四种方法
读写XML的四种方法XML(eXtensible Markup Language)是一种用于表示和传输数据的标记语言。
它具有良好的可读性和扩展性,被广泛应用于Web开发、数据交换和配置文件等领域。
在读写和处理XML数据时,有许多方法可供选择。
本文将介绍四种常见的读写XML的方法:DOM、SAX、JDOM、和XMLStreamReader/XMLStreamWriter。
1. DOM(Document Object Model):DOM是一种基于树形结构的解析器,它将整个XML文档加载到内存中,并将其表示为一个对象树。
在DOM中,每个XML元素都被表示为一个节点(Node),可以通过节点的属性和方法对其进行操作。
读取XML文档时,可以使用DOM解析器将其转换为一个DOM树,然后通过节点的方法访问和修改树结构。
写入XML文档时,可以通过创建和修改节点来构建DOM树,并使用DOM解析器将其保存为XML文档。
使用DOM读取XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。
- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。
- 使用DocumentBuilder对象解析XML文档,并返回一个Document对象。
- 通过Document对象的方法遍历和操作XML文档的节点。
使用DOM写入XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。
- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。
- 使用DocumentBuilder对象创建一个Document对象。
- 通过Document对象的方法创建和添加元素节点、属性节点等。
- 使用TransformerFactory和Transformer对象将Document对象保存为XML文档。
DOM的优点是易于使用和理解,可以方便地遍历和修改XML文档。
dom4j_API详解
dom4j API使用简介功能简介dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。
dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。
在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。
如今你可以看到越来越多的Java软件都在使用dom4j来读写XM L,特别值得一提的是连Sun的JAXM也在用dom4j。
这是必须使用的jar包, Hibernate用它来读写配置文件。
概念DOM4J是出品的一个开源XML解析包,它的网站中这样定义:Dom4j is an easy to use, open source library for working with XML, XPath an d XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。
它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
DOM4J使用起来非常简单。
只要你了解基本的XML-DOM模型,就能使用。
然而他自己带的指南只有短短一页(html),不过说的到挺全。
国内的中文资料很少。
因而俺写这个短小的教程方便大家使用,这篇文章仅谈及基本的用法,如需深入的使用,请……自己摸索或查找别的资料。
之前看过IBM developer社区的文章(参见附录),提到一些XML解析包的性能比较,其中DOM4J的性能非常出色,在多项测试中名列前茅。
(事实上DOM4J的官方文档中也引用了这个比较)所以这次的项目中我采用了DOM4J作为XML解析工具。
读取xml的五种方法
124 * @throws SAXException */
125 public void endElement(String namespaceURI, String localName,String qName) throws SAXException{
28 System.exit(1);
29 }
30 //获得根节点StuInfo
31 Element elmtStuInfo = doc.getDocumentElement();
32 //得到所有student节点
33 NodeList nlStudent = elmtStuInfo.getElementsByTagNameNS(
23 } catch (DOMException dom) {
24Message());
25 System.exit(1);
26 } catch (IOException ioe) {
27 System.err.println(ioe);
在java环境下读取xml文件的方法主要有5种:DOM、SAX、JDOM、JAXB、dom4j
最常用、最好用的dom4j
1. DOM(Document Object Model)
此 方法主要由W3C提供,它将xml文件全部读入内存中,然后将各个元素组成一棵数据树,以便快速的访问各个节点 。 因此非常消耗系统性能 ,对比较大的文档不适宜采用DOM方法来解析。 DOM API 直接沿袭了 XML 规范。每个结点都可以扩展的基于 Node 的接口,就多态性的观点来讲,它是优秀的,但是在 Java 语言中的应用不方便,并且可读性不强。
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解析xml实例
使用dom4j 解析XML使用domj4 API 创建与修改XML 文档简介:dom4j 是一种解析XML 文档的开放源代码XML 框架。
本文介绍如何使用包含在dom4j 中的解析器创建并修改XML 文档。
dom4j API 包含一个解析XML 文档的工具。
本文中将使用这个解析器创建一个示例XML 文档。
清单1 显示了这个示例XML 文档,catalog.xml。
清单1. 示例XML 文档(catalog.xml)<?xml version="1.0" encoding="UTF-8"?><catalog><!--An XML Catalog--><?target instruction?><journal title="XML Zone"publisher="IBM developerWorks"><article level="Intermediate" date="December-2001"><title>Java configuration with XML Schema</title><author><firstname>Marcello</firstname><lastname>Vitaletti</lastname></author></article></journal></catalog>然后使用同一个解析器修改catalog.xml,清单 2 是修改后的XML 文档,catalog-modified.xml。
清单2. 修改后的XML 文档(catalog-modified.xml)<?xml version="1.0" encoding="UTF-8"?><catalog><!--An XML catalog--><?target instruction?><journal title="XML Zone"publisher="IBM developerWorks"><article level="Introductory" date="October-2002"><title>Create flexible and extensible XML schemas</title><author><firstname>Ayesha</firstname><lastname>Malik</lastname></author></article></journal></catalog>与W3C DOM API 相比,使用dom4j 所包含的解析器的好处是dom4j 拥有本地的XPath 支持。
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 模型,就能使⽤。
java读取XML文件内容的四种方法
Java parse XML methods(4)关键字: xml1. 介绍1>DOM(JAXP Crimson解析器)DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。
DOM是以层次结构组织的节点或信息片断的集合。
这个层次结构允许开发人员在树中寻找特定信息。
分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。
由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。
DOM 以及广义的基于树的处理具有几个优点。
首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。
它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。
DOM使用起来也要简单得多。
2>SAXSAX处理的优点非常类似于流媒体的优点。
分析能够立即开始,而不是等待所有的数据被处理。
而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。
这对于大型文档来说是个巨大的优点。
事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。
一般来说,SAX还比它的替代者DOM快许多。
选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM还是SAX解析模型是一个非常重要的设计决策。
DOM采用建立树形结构的方式访问XML文档,而SAX 采用的事件模型。
DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。
用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用 navigation APIs访问所需的树节点来完成任务。
可以很容易的添加和修改树中的元素。
然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。
由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。
SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。
Dom4j教程--好用易懂
dom4j功能简介dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。
dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。
在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。
如今你可以看到越来越多的Java软件都在使用dom4j来读写XM L,特别值得一提的是连Sun的JAXM也在用dom4j。
这是必须使用的jar包, Hibernate用它来读写配置文件。
概念DOM4J是出品的一个开源XML解析包,它的网站中这样定义:Dom4j is an easy to use, open source library for working with XML, XPath an d XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。
它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
DOM4J使用起来非常简单。
只要你了解基本的XML-DOM模型,就能使用。
然而他自己带的指南只有短短一页(html),不过说的到挺全。
国内的中文资料很少。
因而俺写这个短小的教程方便大家使用,这篇文章仅谈及基本的用法,如需深入的使用,请……自己摸索或查找别的资料。
之前看过IBM developer社区的文章(参见附录),提到一些XML解析包的性能比较,其中DOM4J的性能非常出色,在多项测试中名列前茅。
(事实上DOM4J的官方文档中也引用了这个比较)所以这次的项目中我采用了DOM4J作为XML解析工具。
XML解析器——Dom4j
XML解析器——Dom4j⼀、Dom4j 技术概述 先是 Jdom 在 dom 基础上进⾏了封装,⽽ dom4j ⼜对 jdom 进⾏了封装。
DOM4J是⼀个开源的,基于Java的库来解析XML⽂档,它具有⾼度的灵活性,⾼性能和内存效率的API。
这是java的优化,使⽤Java集合像列表和数组。
它可以使⽤DOM,SAX,XPath和XSLT。
它解析⼤型XML⽂档时具有极低的内存占⽤。
⼆、DOM4j 类库 1、类库 官⽹下载需要的 jar 包: 2、使⽤ dom4j 的 jar包: docs 是⽂档⽬录: 在docs ⾥⾯找到 index.html ,快速⼊门三、DOM4j 解析步骤 步骤:1、先加载 xml ⽂件创建 Document 对象2、通过 Document 对象拿到根元素对象3、通过根元素.elelemts(标签名); 可以返回⼀个集合,这个集合⾥放着。
所有你指定的标签名的元素对象4、获取需要操作的元素,进⾏相应的操作 XML ⽂件:1 <?xml version="1.0" encoding="UTF-8"?>2 <books>3 <book sn="123">4 <name>Java</name>5 <price>9.9</price>6 <author>⽼张</author>7 </book>8 <book sn="456">9 <name>Python</name>10 <price>99.99</price>11 <author>⽼李</author>12 </book>13 </books> 测试解析⽂件:1 /*2 * dom4j 获取 Documet 对象3 */4 @Test5 public void getDocument() throws DocumentException {6 // 要创建⼀个 Document 对象,需要我们先创建⼀个 SAXReader 对象7 SAXReader reader = new SAXReader();8 // 这个对象⽤于读取 xml ⽂件,然后返回⼀个 Document。
【黑马程序员】Dom4J解析XML的范例浅析
【黑马程序员】Dom4J解析XML的范例浅析前言XML是可扩展标记语言的缩写,在编程领域是非常常用的,我们经常会用它进行数据的传输或者用作配置文件,那么对XML的操作的也会是我们需要掌握的一项技术,本文会使用Java语言,利用DOM4J这个非常优秀的开源库,探讨生成XML格式数据和解析XML数据的两个方面的问题。
1. Dom4J简介在上,是这么介绍的:Dom4j是一个易用的、开源的库,用于XML,XPath 和XSLT。
它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
简单来说,Dom4j具有性能优秀,操作简单的优点2. Dom4j的使用2.1 导入jar包这个操作非常简单,我们可以在网上下载jar包,或者在https:///projects/dom4j/?source=directory下载了dom4j项目之后,解压缩成jar包,然后导入项目中2.2 案例一:用Java代码生成xml文档代码思路:我们要生成一个XML文档,其实就像我们平时书写文档是一样的道理:创建文档-> 创建根元素-> 添加根元素子元素也是先创建再添加到其他元素中如果元素上有属性则先添加属性下面直接上代码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;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(newFileWriter("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>小总结到目前为止我们已经完成了对一个xml格式数据的生成,如果要生成其他样式的数据,也是比较类似的操作,本文就不再赘述了。
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();。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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>