最简单而强大读写xml的方法(DOM4J经典API)(学习自用备份)
- 格式:doc
- 大小:83.50 KB
- 文档页数:8
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的⽅式实现。
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⽂件最近在⼀些对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节点<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⾥⾯的值做个参数, 封装为⽅法即可给外界调⽤.// 表⽰从匹配选择的当前节点选择⽂档中的节点,⽽不考虑它们的位置。
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包,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认识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("⽤户不存在");}。
读写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是一个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解析工具。
、一个很好的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使用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教程⽬录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 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是一个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⼀、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。