java dom解析xml

合集下载

java_Dom4j解析XML详解

java_Dom4j解析XML详解

学习:Dom4j1、DOM4J简介DOM4J是 出品的一个开源XML 解析包。

DOM4J应用于Java 平台,采用了Java 集合框架并完全支持DOM,SAX 和JAXP。

DOM4J 使用起来非常简单。

只要你了解基本的XML-DOM 模型,就能使用。

Dom:把整个文档作为一个对象。

DOM4J 最大的特色是使用大量的接口。

它的主要接口都在org.dom4j里面定义:接口之间的继承关系如下:interface ng.Cloneableinterface org.dom4j.Nodeinterface org.dom4j.Attributeinterface org.dom4j.Branchinterface org.dom4j.Documentinterface org.dom4j.Elementinterface org.dom4j.CharacterDatainterface org.dom4j.CDATAinterface mentinterface org.dom4j.Textinterface org.dom4j.DocumentTypeinterface org.dom4j.Entityinterface org.dom4j.ProcessingInstruction2、XML文档操作12.1、读取XML文档:读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。

因为利用了相同的接口,它们的调用方式是一样的。

public static Docum ent load(String filenam e) {Document docum ent =null;try {SAXReader saxReader = new SAXReader();docum ent =saxReader.read(new File(filename)); //读取XML文件,获得docum ent 对象} catch (Exception ex) {ex.printStackTrace();}return docum ent;}或public static Docum ent load(URL url) {Document docum ent =null;try {SAXReader saxReader = new SAXReader();docum ent =saxReader.read(url); //读取XML文件,获得docum ent对象} catch (Exception ex) {ex.printStackTrace();}return docum ent;}//读取指定的xml文件之后返回一个Document对象,这个对象代表了整个XML文档,用于各种Do m运算。

JavaXML解析的四种方法(连载)

JavaXML解析的四种方法(连载)

JavaXML解析的四种⽅法(连载)1. xml简介 XML:指可扩展标记语⾔, Extensible Markup Language;类似HTML。

XML的设计宗旨是传输数据,⽽⾮显⽰数据。

⼀个xml⽂档实例:1 <?xml version="1.0" encoding="UTF-8"?>2 <company name="Tencent" address="深圳市南⼭区">3 <department deptNo="001" name="development">4 <employee id="devHead" position="minister">许刚</employee>5 <employee position="developer">⼯程师A</employee>6 </department>7 <department deptNo="002" name="education">8 <employee position="minister" telephone="1234567">申林</employee>9 <employee position="trainee">实习⽣A</employee>10 </department>11 </company> 第⼀⾏是 XML 声明。

它定义 XML 的版本 (1.0) 和所使⽤的编码. 下⼀⾏描述⽂档的根元素:<company>开始,该根元素具有2个属性“name”,"address"。

java使用document解析xml文件

java使用document解析xml文件

java使⽤document解析xml⽂件准备⼯作:1创建java⼯程2创建xml⽂档。

完成后看下⾯代码:import org.w3c.dom.*;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;public class Main {public static void main(String[] args) throws Exception {//创建⼀个⽂档解析器⼯⼚DocumentBuilderFactory fac= DocumentBuilderFactory.newInstance();//⽤上⾯的⼯⼚创建⼀个⽂档解析器DocumentBuilder builder=fac.newDocumentBuilder();//⽤上⾯的⽂档解析器解析⼀个⽂件放到document对象⾥Document doc=builder.parse("src/server.xml");//获取⽂档中节点名称为Listener的所有节点,并返回⼀个节点集合NodeList listenerList=doc.getElementsByTagName("Listener");System.out.println("⼀共有"+listenerList.getLength()+"个节点");//遍历整个集合(把所有标签名为Listener的节点⼀个⼀个拿出来for (int i=0;i<listenerList.getLength();i++){System.out.println("===========这是第"+(i+1)+"个listener节点的开始:===========");//把集合⾥的每⼀个listener节点分别拿出来Node node=listenerList.item(i);//再把上⼀个节点中的所有属性拿出来NamedNodeMap nodeMap= node.getAttributes();System.out.println("第"+(i+1)+"个节点⼀共有"+nodeMap.getLength()+"个属性");//遍历所有属性for(int j=0;j<nodeMap.getLength();j++){Node node1=nodeMap.item(j);System.out.println("第"+(j+1)+"个属性的名称是"+node1.getNodeName());System.out.println("第"+(j+1)+"个属性的值是"+node1.getNodeValue());}//获取节点的所有⼦节点,注意会把所有换⾏符也解析为⼦节点NodeList childNode=node.getChildNodes();//遍历所有⼦节点for(int k=0;k<childNode.getLength();k++){if(childNode.item(k).getNodeType()==Node.ELEMENT_NODE){//这个过滤条件是只将标签节点保留(换⾏符的节点就删去)}System.out.println("===========这是第"+(i+1)+"个节点的结束:===========");}}}为了⽅便记忆,在这⾥拆解⼀下。

java解析xml的4种方式的优缺点对比及实现详解

java解析xml的4种方式的优缺点对比及实现详解

java解析xml的4种⽅式的优缺点对⽐及实现详解⼀、介绍及优缺点分析DOM(Document Object Model)DOM是⽤与平台和语⾔⽆关的⽅式表⽰XML⽂档的官⽅W3C标准。

DOM是以层次结构组织的节点或信息⽚断的集合。

这个层次结构允许开发⼈员在树中寻找特定信息。

分析该结构通常需要加载整个⽂档和构造层次结构,然后才能做任何⼯作。

由于它是基于信息层次的,因⽽DOM被认为是基于树或基于对象的。

【优点】①允许应⽤程序对数据和结构做出更改。

②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据。

整个⽂档树在内存中,便于操作;⽀持删除、修改、重新排列等多种功能【缺点】①通常需要加载整个XML⽂档来构造层次结构,消耗资源⼤。

将整个⽂档调⼊内存(包括⽆⽤的节点),浪费时间和空间;使⽤场合:⼀旦解析了⽂档还需多次访问这些数据;硬件资源充⾜(内存、CPU)SAX(Simple API for XML)SAX处理的优点⾮常类似于流媒体的优点。

分析能够⽴即开始,⽽不是等待所有的数据被处理。

⽽且,由于应⽤程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。

这对于⼤型⽂档来说是个巨⼤的优点。

事实上,应⽤程序甚⾄不必解析整个⽂档;它可以在某个条件得到满⾜时停⽌解析。

⼀般来说,SAX还⽐它的替代者DOM快许多。

选择DOM还是选择SAX?对于需要⾃⼰编写代码来处理XML⽂档的开发⼈员来说,选择DOM还是SAX解析模型是⼀个⾮常重要的设计决策。

DOM采⽤建⽴树形结构的⽅式访问XML⽂档,⽽SAX采⽤的是事件模型。

DOM解析器把XML⽂档转化为⼀个包含其内容的树,并可以对树进⾏遍历。

⽤DOM解析模型的优点是编程容易,开发⼈员只需要调⽤建树的指令,然后利⽤navigation APIs访问所需的树节点来完成任务。

可以很容易的添加和修改树中的元素。

然⽽由于使⽤DOM解析器的时候需要处理整个XML⽂档,所以对性能和内存的要求⽐较⾼,尤其是遇到很⼤的XML⽂件的时候。

java 会计档案xml解析

java 会计档案xml解析

java 会计档案xml解析在当今数字化时代,会计领域的信息处理变得越来越重要。

随着企业数量的增长和财务数据的复杂性,需要一种高效、可靠的方式来处理会计档案。

XML(可扩展标记语言)作为一种常用的数据交换格式,被广泛应用于会计领域。

Java作为一种强大而灵活的编程语言,提供了许多工具和库来解析和处理XML文件。

在会计档案XML解析中,Java的优势得到了充分的发挥。

下面将介绍一些主要的Java XML解析库和技术,以及它们在会计档案处理中的应用。

1. DOM(文档对象模型)解析DOM解析器将整个XML文档加载到内存中,并构建一个树形结构,以便于对文档进行操作。

在会计档案XML解析中,DOM解析器可以方便地遍历XML文档的节点,提取和修改数据。

然而,由于DOM解析器将整个文档加载到内存中,对于大型XML文件来说,内存消耗较大。

2. SAX(简单API for XML)解析SAX解析器以事件驱动的方式逐行读取XML文档,并触发相应的事件。

在会计档案XML解析中,SAX解析器可以高效地处理大型XML文件,因为它不需要将整个文档加载到内存中。

通过实现SAX 解析器的回调函数,可以在遍历过程中处理和提取数据。

3. JAXB(Java体系结构的XML绑定)解析JAXB是Java提供的一种用于将XML文档与Java对象之间进行转换的技术。

在会计档案XML解析中,可以使用JAXB将XML文档映射到Java对象上,从而方便地进行数据操作和处理。

JAXB提供了注解和配置文件来定义XML文档和Java对象之间的映射关系。

除了上述的XML解析库和技术,还有其他一些Java工具和库,如JDOM、Xerces和StAX等,也可以用于会计档案XML解析。

根据具体的需求和项目要求,可以选择合适的解析方式。

在实际应用中,会计档案XML解析的过程可能涉及到数据验证、数据转换、数据存储等多个环节。

因此,除了XML解析技术外,还需要结合其他相关的Java技术和数据库技术来完成整个处理流程。

org.w3c.dom(javadom)解析XML文档

org.w3c.dom(javadom)解析XML文档

org.w3c.dom(javadom)解析XML⽂档位于org.w3c.dom操作XML会⽐较简单,就是将XML看做是⼀颗树,DOM就是对这颗树的⼀个数据结构的描述,但对⼤型XML⽂件效果可能会不理想⾸先来了解点Java DOM 的 API:1.解析器⼯⼚类:DocumentBuilderFactory创建的⽅法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();2.解析器:DocumentBuilder创建⽅法:通过解析器⼯⼚类来获得 DocumentBuilder db = dbf.newDocumentBuilder();3.⽂档树模型Document创建⽅法:a.通过xml⽂档 Document doc = db.parse("bean.xml"); b.将需要解析的xml⽂档转化为输⼊流 InputStream is = new FileInputStream("bean.xml");Document doc = db.parse(is);Document对象代表了⼀个XML⽂档的模型树,所有的其他Node都以⼀定的顺序包含在Document对象之内,排列成⼀个树状结构,以后对XML⽂档的所有操作都与解析器⽆关,直接在这个Document对象上进⾏操作即可;包含的⽅法:4.节点列表类NodeListNodeList代表了⼀个包含⼀个或者多个Node的列表,根据操作可以将其简化的看做为数组5.节点类NodeNode对象是DOM中最基本的对象,代表了⽂档树中的抽象节点。

但在实际使⽤中很少会直接使⽤Node对象,⽽是使⽤Node对象的⼦对象Element,Attr,Text等6.元素类Element是Node类最主要的⼦对象,在元素中可以包含属性,因⽽Element中有存取其属性的⽅法7.属性类Attr代表某个元素的属性,虽然Attr继承⾃Node接⼝,但因为Attr是包含在Element中的,但并不能将其看做是Element的⼦对象,因为Attr并不是DOM树的⼀部分基本的知识就到此结束,更加具体的⼤家可以参阅JDK API⽂档实战:1.使⽤DOM来遍历XML⽂档中的全部内容并且插⼊元素:school.xml⽂档:<?xml version = "1.0" encoding = "utf-8"?><School><Student><Name>沈浪</Name><Num>1006010022</Num><Classes>信管2</Classes><Address>浙江杭州3</Address><Tel>123456</Tel></Student><Student><Name>沈1</Name><Num>1006010033</Num><Classes>信管1</Classes><Address>浙江杭州4</Address><Tel>234567</Tel></Student><Student><Name>沈2</Name><Num>1006010044</Num><Classes>⽣⼯2</Classes><Address>浙江杭州1</Address><Tel>345678</Tel></Student><Student><Name>沈3</Name><Num>1006010055</Num><Classes>电⼦2</Classes><Address>浙江杭州2</Address><Tel>456789</Tel></Student></School>DomDemo.java1 package xidian.sl.dom;2import java.io.FileOutputStream;34import javax.xml.parsers.DocumentBuilder;5import javax.xml.parsers.DocumentBuilderFactory;67import org.apache.crimson.tree.XmlDocument;8import org.w3c.dom.Document;9import org.w3c.dom.Element;10import org.w3c.dom.NodeList;111213public class DomDemo {14/**15 * 遍历xml⽂档16 * */17public static void queryXml(){18try{19//得到DOM解析器的⼯⼚实例20 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();21//从DOM⼯⼚中获得DOM解析器22 DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();23//把要解析的xml⽂档读⼊DOM解析器24 Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");25 System.out.println("处理该⽂档的DomImplementation对象 = "+ doc.getImplementation());26//得到⽂档名称为Student的元素的节点列表27 NodeList nList = doc.getElementsByTagName("Student");28//遍历该集合,显⽰结合中的元素及其⼦元素的名字29for(int i = 0; i< nList.getLength() ; i ++){30 Element node = (Element)nList.item(i);31 System.out.println("Name: "+ node.getElementsByTagName("Name").item(0).getFirstChild().getNodeValue());32 System.out.println("Num: "+ node.getElementsByTagName("Num").item(0).getFirstChild().getNodeValue());33 System.out.println("Classes: "+ node.getElementsByTagName("Classes").item(0).getFirstChild().getNodeValue());34 System.out.println("Address: "+ node.getElementsByTagName("Address").item(0).getFirstChild().getNodeValue());35 System.out.println("Tel: "+ node.getElementsByTagName("Tel").item(0).getFirstChild().getNodeValue());36 }3738 }catch (Exception e) {39// TODO: handle exception40 e.printStackTrace();41 }42 }43/**44 * 向已存在的xml⽂件中插⼊元素45 * */46public static void insertXml(){47 Element school = null;48 Element student = null;49 Element name = null;50 Element num = null;51 Element classes = null;52 Element address = null;53 Element tel = null;54try{55//得到DOM解析器的⼯⼚实例56 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();57//从DOM⼯⼚中获得DOM解析器58 DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();59//把要解析的xml⽂档读⼊DOM解析器60 Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");61//得到⽂档名称为Student的元素的节点列表62 NodeList nList = doc.getElementsByTagName("School");63 school = (Element)nList.item(0);64//创建名称为Student的元素65 student = doc.createElement("Student");66//设置元素Student的属性值为23167 student.setAttribute("examId", "23");68//创建名称为Name的元素69 name = doc.createElement("Name");70//创建名称为⾹⾹的⽂本节点并作为⼦节点添加到name元素中71 name.appendChild(doc.createTextNode("⾹⾹"));72//将name⼦元素添加到student中73 student.appendChild(name);74/**75 * 下⾯的元素依次加⼊即可76 * */77 num = doc.createElement("Num");78 num.appendChild(doc.createTextNode("1006010066"));79 student.appendChild(num);8081 classes = doc.createElement("Classes");82 classes.appendChild(doc.createTextNode("眼视光5"));83 student.appendChild(classes);8485 address = doc.createElement("Address");86 address.appendChild(doc.createTextNode("浙江温州"));87 student.appendChild(address);8889 tel = doc.createElement("Tel");90 tel.appendChild(doc.createTextNode("123890"));91 student.appendChild(tel);9293//将student作为⼦元素添加到树的根节点school94 school.appendChild(student);95//将内存中的⽂档通过⽂件流⽣成insertSchool.xml,XmlDocument位于crison.jar下96 ((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/dom/insertSchool.xml"));97 System.out.println("成功");98 }catch (Exception e) {99// TODO: handle exception100 e.printStackTrace();101 }102 }103public static void main(String[] args){104//读取105 DomDemo.queryXml();106//插⼊107 DomDemo.insertXml();108 }109 }110运⾏后结果:然后到⽬录下查看⽣成的xml⽂件:打开查看内容:上⾯添加元素后输出的⽂件与之前的⽂件不是同⼀个⽂件,如果需要输出到原⽂件中,那么只要将路径改为原⽂间路径即可:src/xidian/sl/dom/school.xml2.创建XML过程与插⼊过程相似,就是Document需要创建package xidian.sl.dom;import java.io.FileOutputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.apache.crimson.tree.XmlDocument;import org.w3c.dom.Document;import org.w3c.dom.Element;public class CreateNewDom {/*** 创建xml⽂档* */public static void createDom(){Document doc;Element school,student;Element name = null;Element num = null;Element classes = null;Element address = null;Element tel = null;try{//得到DOM解析器的⼯⼚实例DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();//从DOM⼯⼚中获得DOM解析器DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();//创建⽂档树模型对象doc = dbBuilder.newDocument();if(doc != null){//创建school元素school = doc.createElement("School");//创建student元素student = doc.createElement("Student");//设置元素Student的属性值为231student.setAttribute("examId", "23");//创建名称为Name的元素name = doc.createElement("Name");//创建名称为⾹⾹的⽂本节点并作为⼦节点添加到name元素中name.appendChild(doc.createTextNode("⾹⾹"));//将name⼦元素添加到student中student.appendChild(name);/*** 下⾯的元素依次加⼊即可* */num = doc.createElement("Num");num.appendChild(doc.createTextNode("1006010066"));student.appendChild(num);classes = doc.createElement("Classes");classes.appendChild(doc.createTextNode("眼视光5"));student.appendChild(classes);address = doc.createElement("Address");address.appendChild(doc.createTextNode("浙江温州"));student.appendChild(address);tel = doc.createElement("Tel");tel.appendChild(doc.createTextNode("123890"));student.appendChild(tel);//将student作为⼦元素添加到树的根节点schoolschool.appendChild(student);//添加到⽂档树中doc.appendChild(school);//将内存中的⽂档通过⽂件流⽣成insertSchool.xml,XmlDocument位于crison.jar下((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/dom/createSchool.xml")); System.out.println("创建成功");}}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public static void main(String[] args) {CreateNewDom.createDom();}}运⾏结果:DOM的操作应该还是⾮常简单明了的,掌握了没哦。

java dom解析

java dom解析

java dom解析DOM解析器是一种用于解析XML文档的Java库。

它允许开发人员以结构化的方式访问和操作XML文件的数据。

DOM解析器将整个XML文档加载到内存中,并将其表示为一个树形结构,其中每个节点都对应着XML文档中的一个元素、属性或文本。

通过 DOM 解析器,我们可以轻松地遍历整个XML文档,提取所需的数据或修改文档的内容。

使用DOM解析器解析XML文档的基本步骤如下:1. 导入所需的Java类库:要使用DOM解析器,我们需要导入javax.xml.parsers包的相应类。

2. 创建一个XML解析器的工厂对象:通过调用javax.xml.parsers包中的DocumentBuilderFactory类的静态方法newInstance(),我们可以获取XML解析器的工厂对象。

3. 创建一个XML解析器对象:使用XML解析器的工厂对象的newDocumentBuilder()方法,我们可以创建一个XML解析器对象。

4. 解析XML文档:通过调用XML解析器对象的parse()方法,我们可以将XML文档加载到内存中并解析它。

解析结果将以一个Document对象的形式返回。

5. 获取节点信息:我们可以使用Document对象提供的方法来访问XML文档中的各个节点。

例如,可以使用getElementsByTagName()方法获取指定标签名的节点列表,使用getAttribute()方法获取节点的属性值,使用getTextContent()方法获取节点的文本内容等等。

6. 进行数据处理:一旦获取了所需的节点信息,我们可以根据具体需求对数据进行处理。

例如,可以将节点的属性值转换为Java对象,将节点的数据存储到数据库中,或者将节点的文本内容展示在用户界面上等等。

7. 释放资源:在处理完XML文档后,记得要释放DOM解析器的资源,可以调用Document对象的normalize()方法进行清理工作。

xml文件解析方法

xml文件解析方法

xml文件解析方法XML文件解析方法引言:XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它具有良好的可读性和灵活性,被广泛应用于数据交换和配置文件等领域。

在处理XML文件时,解析是必不可少的环节。

本文将介绍几种常用的XML文件解析方法,包括DOM、SAX和StAX。

一、DOM解析方法DOM(文档对象模型)是一种将整个XML文件以树形结构加载到内存中的解析方法。

DOM解析器将XML文件解析为一个树状结构,通过遍历节点来获取和操作XML文件中的数据。

DOM解析方法的优点是易于理解和使用,可以随机访问XML文件中的任意节点,但缺点是占用内存较大,不适用于大型XML文件的解析。

1. 创建DOM解析器对象:使用标准的Java API,可以通过DocumentBuilderFactory类来创建DOM解析器对象。

2. 加载XML文件:通过DOM解析器对象的parse()方法加载XML文件,将其转化为一个树形结构。

3. 遍历节点:使用DOM解析器对象提供的方法,如getElementsByTagName()、getChildNodes()等,可以遍历XML文件中的各个节点,获取节点的名称、属性和文本内容等信息。

4. 获取节点数据:通过节点对象提供的方法,如getNodeName()、getTextContent()等,可以获取节点的名称和文本内容。

二、SAX解析方法SAX(简单API for XML)是一种基于事件驱动的XML解析方法。

在SAX解析过程中,解析器顺序读取XML文件,当遇到节点开始、节点结束或节点文本等事件时,会触发相应的回调方法。

相比于DOM 解析方法,SAX解析方法具有内存占用小、解析速度快的优点,但缺点是无法随机访问XML文件中的节点。

1. 创建SAX解析器对象:使用标准的Java API,可以通过SAXParserFactory类来创建SAX解析器对象。

2. 实现事件处理器:自定义一个事件处理器,实现SAX解析器提供的DefaultHandler类,并重写相应的回调方法,如startElement()、endElement()和characters()等。

如何使用DOM解析XML文件

如何使用DOM解析XML文件

如何使用DOM解析XML文件DOM(Document Object Model)是一种用于解析和处理XML文件的常用技术。

DOM API允许开发者以树形的数据结构方式访问和操作XML文件的内容。

1.导入DOMAPI:首先,你需要在你的代码中导入DOMAPI相关的类和方法。

在大多数编程语言中,都有现成的DOM库可供使用。

3. 加载XML文件:将要解析的XML文件加载到解析器中,可以使用解析器的`load(`或`parse(`方法,这个方法会将XML文件读取到内存中。

4. 创建一个DOM树:通过调用解析器的`getDocument(`或`parse(`方法,可以获取解析器对XML文件进行解析后的DOM树对象。

5. 获取根节点:通过DOM树对象的`getDocumentElement(`方法,可以获取XML文件的根节点。

6. 遍历子节点:通过DOM树对象的`getChildNodes(`方法,可以获取根节点的所有子节点。

然后,你可以使用循环遍历这些子节点,获取它们的内容和属性,并进一步操作。

7. 获取节点内容:通过DOM树节点对象的`getNodeValue(`方法,可以获取节点的文本内容。

如果节点有子节点,可以使用`getChildNodes(`方法获取它们的内容。

8. 获取节点属性:通过DOM树节点对象的`getAttribute(`方法,可以获取节点的属性值。

你需要在括号中指定要获取的属性名称。

9. 修改节点内容:通过DOM树节点对象的`setNodeValue(`方法,可以修改节点的文本内容。

10. 修改节点属性:通过DOM树节点对象的`setAttribute(`方法,可以修改节点的属性值。

你需要在括号中指定要修改的属性名称和新值。

11. 创建新节点:通过DOM树节点对象的`createElement(`方法,可以创建一个新节点对象。

你需要在括号中指定节点名称。

12. 添加节点:通过DOM树节点对象的`appendChild(`方法,可以将新节点添加为现有节点的子节点。

java xml格式返回报文解析

java xml格式返回报文解析

java xml格式返回报文解析Java中可以使用多种方式解析XML格式的返回报文,常见的方式有DOM解析、SAX解析以及基于XML绑定技术的解析。

每种方式都有不同的特点和适用场景,下面将详细介绍这三种解析方式。

1. DOM解析:DOM(Document Object Model)解析是将整个XML文档加载到内存中,构建成一个树形结构,并提供API来操作这个树。

DOM解析提供了许多API,可以通过节点遍历和搜索、属性读取和设置、节点创建和删除等方式来处理XML文档。

DOM解析适用于对XML文档进行多次读写操作,如增删改查等复杂的操作。

使用Java的DOM解析,可以通过以下几个步骤实现:1)使用DocumentBuilderFactory创建一个DocumentBuilder对象。

2)调用DocumentBuilder的parse方法,传入XML文件的输入流,将XML文档解析为一个Document对象。

3)通过Document对象可以获取XML文档的根元素,从而开始对XML文档进行遍历和操作。

DOM解析的优点是能够将整个XML文档加载到内存中,便于操作和修改。

但是对于较大的XML文件,DOM解析会消耗大量的内存空间。

2. SAX解析:SAX(Simple API for XML)解析是一种基于事件驱动的解析方式,它逐行读取XML文档并触发相应的事件,应用程序根据事件的发生来处理XML文档。

SAX解析的特点是速度快、内存消耗小,适用于对XML文档进行单次顺序读取的操作。

使用Java的SAX解析,可以通过以下几个步骤实现:1)定义一个继承自DefaultHandler的处理器类,重写相应的事件回调方法。

2)使用SAXParserFactory创建一个SAXParser对象。

3)调用SAXParser的parse方法,传入XML文件的输入流和处理器对象,开始解析XML文档。

SAX解析的优点是速度快,内存消耗小,适用于大型XML文件的解析。

javaDocument生成和解析xml

javaDocument生成和解析xml

javaDocument⽣成和解析xml Document场景:需要知道⽂档所有结构需要把⽂档⼀些元素排序⽂档中的信息被多次使⽤的情况优势:由于Document是java中⾃带的解析器,兼容性强缺点:由于Document是⼀次性加载⽂档信息,如果⽂档太⼤,不太适⽤Document操作步骤第⼀步:初始化xml解析⼯⼚DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();第⼆步:创建DocumentBuilderDocumentBuilder builder = factory.newDocumentBuilder();第三步:创建DocumentDocument doc = builder.newDocument();standalone⽤来表⽰该⽂件是否呼叫其它外部的⽂件。

若值是 ”yes” 表⽰没有呼叫外部⽂件doc.setXmlStandalone(true);第四步:创建节点Element element = doc.createElement("root");element.setAttribute("attr", "root");//设置节点属性childTwoTwo.setTextContent("root attr");//设置标签之间的内容第五步:把节点添加到Documentdoc.appendChild(element);第六步:把xml内容输出到具体的⽂件中,见下⾯代码Document⽣成xmlpackage com.xm.xml.document;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Element;/*** java document⽣成xml* @author ouyangjun*/public class CreateDocument {public static void main(String[] args) {// 调⽤xml⽣成⽅法createDocument(new File("E:\\person.xml"));}public static void createDocument(File file){try {// 初始化xml解析⼯⼚DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();// 创建DocumentBuilderDocumentBuilder builder = factory.newDocumentBuilder();// 创建DocumentDocument doc = builder.newDocument();// standalone⽤来表⽰该⽂件是否呼叫其它外部的⽂件。

XML的四种解析器原理及性能比较

XML的四种解析器原理及性能比较

XML的四种解析器原理及性能比较XML(可扩展标记语言)是一种非常常见的数据交换格式,用于在应用程序之间传递和存储数据。

在处理XML数据时,需要使用解析器来读取和解析XML文档。

下面将介绍XML的四种解析器的原理和性能比较。

1. DOM解析器(Document Object Model Parser):DOM解析器将整个XML文档加载到内存中,并将其表示为一个树形结构,每个节点都对应XML文档中的一个元素或属性。

解析器可以通过遍历这个树形结构来访问和操作XML数据。

由于将整个文档加载到内存中,DOM解析器所需的内存较大,适合处理比较小的XML文档。

虽然性能较差,但它提供了灵活的访问和操作XML数据的方法。

2. SAX解析器(Simple API for XML Parser):3. StAX解析器(Streaming API for XML Parser):StAX解析器是一种混合了DOM和SAX解析器的解析器,它允许开发人员以推拉模型访问XML数据。

开发人员可以使用迭代器的形式遍历XML文档,并根据需要拉取或推送事件。

StAX解析器的内存需求较低,同时也具备灵活的操作XML数据的能力。

4. JAXB解析器(Java Architecture for XML Binding):JAXB解析器是一种用于将XML数据绑定到Java对象的解析器。

它可以将XML文档中的元素和属性映射到具体的Java类和对象上,并提供了将Java对象序列化为XML的能力。

相比于前三种解析器,JAXB解析器需要定义Java类和XML的映射关系,稍微复杂一些。

但它提供了方便的对象操作方式,可以更加简洁地处理XML数据。

对于解析性能的比较,DOM解析器的性能最差,因为它需要将整个XML文档加载到内存中。

对于大型XML文档,DOM解析器可能会导致内存不足的问题。

SAX解析器和StAX解析器的性能较好,因为它们是基于事件驱动的解析器,可以逐行读取XML文档,无需将整个文档加载到内存中。

dom4j解析XML文档

dom4j解析XML文档

将dom4j-1.6.1.jar添加到系统CLASSPATH环境变量中
Dom4j常用的API 【重点掌握】
Element Branch Document
Cloneable
Node
Attribute
DocumentType
CharacterData
ProcessingInstruction
CDATA
<list> <book>疯狂XML讲义</book> <game>扫雷</game> <sport>乒乓球</sport> </list>
在获取<list…/>节点之后,如果希望获取它包含的3个子节点的数 节点之后,如果希望获取它包含的 个子节点的数 在获取 节点之后 据,需要使用如下代码
//获取list元素下的所有子元素 NodeList itemList=list.getChildNodes(); //遍历每个子元素 for(int I=0;I<itemList.getLength();I++){ System.out.println(itemList.item(j).getTextContent().trim()); }
Vistor接口的方法
visit(Attribute node) visit(CDATA node)
简单说明
当Visitor对象访问属性节点时将回调该方法 当Visitor对象访问CDATA片段时将回调该方法 当Visitor对象访问注释节点时将回调该方法 当Visitor对象访问文档根节点时将回调该方法 当Visitor对象访问DTD内容将回调该方法 当Visitor对象访问元素节点将回调该方法 当Visitor对象访问Entity节点将回调该方法 当Visitor对象访问命名空间时回调该方法 当Visitor对象访问处理指令时回调该方法 当Visitor对象访问文档内容时将回调该方法

java dom解析

java dom解析

java dom解析摘要:I.简介- 什么是Java DOM 解析- DOM 解析与SAX 解析、XMLPULL 解析的区别II.Java DOM 解析的优势- 强大的功能- 易于使用- 支持所有XML 元素III.Java DOM 解析的步骤- 导入相关库- 创建解析器- 解析XML 文档- 处理解析结果IV.Java DOM 解析的实际应用- 在Java Web 开发中的应用- 在企业级应用中的使用V.总结- 回顾Java DOM 解析的优势和应用- 展望DOM 解析的未来发展正文:I.简介Java DOM 解析是指使用Java 语言对XML 文档进行解析的过程。

DOM 解析是将XML 文档转化为Java 对象的过程,这些对象可以方便地在Java 程序中进行操作。

与SAX 解析和XMLPULL 解析相比,DOM 解析具有更强大的功能和更高的灵活性,同时其易于使用,支持所有XML 元素,因此被广泛应用于Java 开发中。

II.Java DOM 解析的优势Java DOM 解析具有以下优势:1.强大的功能:DOM 解析能够将XML 文档转化为一个树形结构,方便开发者对XML 文档进行遍历和操作。

2.易于使用:DOM 解析提供了丰富的API,开发者可以轻松地使用这些API 对XML 文档进行解析和操作。

3.支持所有XML 元素:DOM 解析器可以处理所有的XML 元素,包括各种复杂结构和属性。

III.Java DOM 解析的步骤Java DOM 解析的基本步骤如下:1.导入相关库:要使用Java DOM 解析,首先需要导入相关的库,包括javax.xml.parsers 和org.w3c.dom 等。

2.创建解析器:使用DocumentBuilderFactory 类创建一个解析器对象。

3.解析XML 文档:使用解析器对象的parse() 方法将XML 文档解析为DOM 树。

4.处理解析结果:使用DOM 树的各个节点进行XML 文档的处理。

java dom解析

java dom解析

java dom解析**一、XML概述**XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。

它具有结构清晰、易于阅读和编写等特点。

XML文档由元素、属性、文本和注释组成。

在Java开发中,解析XML数据是一种常见的需求。

**二、DOM解析原理**DOM(文档对象模型)是一种编程接口,用于表示和操作XML文档。

DOM解析就是将XML文档转换为Java对象的过程。

DOM解析器读取XML 文档,构建一棵对象树,树的节点对应XML文档的元素、属性和文本。

开发者可以通过操作这棵树来访问和修改XML文档内容。

**三、Java DOM解析库介绍**Java提供了内置的DOM解析库,主要包括以下两类:1.JDK自带的XML解析库:提供了对XML文档的基本操作,如解析、查询、修改等。

2.第三方解析库:例如Apache Commons XML、Jackson等。

这些库提供了更丰富、高效的API,以及更好的异常处理和性能优化。

**四、Java DOM解析实例**以下是一个使用Java内置DOM解析库解析XML文档的示例:```javaimport java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;public class JavaDOMParseExample {public static void main(String[] args) throws Exception { File file = new File("example.xml");DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();DocumentBuilder dBuilder =dbFactory.newDocumentBuilder();Document doc = dBuilder.parse(file);doc.getDocumentElement().normalize();Element rootElement = doc.getDocumentElement();System.out.println("Root element: " + rootElement.getNodeName());// 遍历和操作XML文档的其他节点// ...}}```**五、DOM解析优缺点分析**1.优点:DOM解析具有较好的可读性和可控性,开发者可以直接操作XML文档的结构,易于理解和实现。

java xml相关操作

java xml相关操作

java xml相关操作
Java与XML的结合是一种常见的方式,可以实现数据的存储和传输。

以下是一些Java XML相关操作的详细介绍:
1. 解析XML文件:使用Java中的DOM、SAX或JDOM等API可以解析XML文件并获取其中的数据。

2. 创建XML文件:可以使用Java中的DOM或JDOM等API创建XML文件,并将数据写入其中。

3. 使用XML Schema验证XML文档:可以使用Java中的SAX或DOM API以及一些第三方库,如JAXB或XSDValidator等,来验证XML 文档是否符合XML Schema的规范。

4. 转换XML格式:可以使用Java中的XSLT API将XML文档转换为其他格式,如HTML、PDF等。

5. 使用XPath查询XML文档:可以使用Java中的XPath API来查询XML文档中的数据。

6. 使用JAXB绑定XML和Java对象:可以使用JAXB API将XML 文档中的数据绑定到Java对象上,并进行操作和修改。

7. 使用XML与Web服务交互:可以使用Java中的WebService API 来使用XML和Web服务交互,并获取和发送数据。

总之,Java与XML的结合可以实现许多功能,如数据存储、数据传输、Web服务交互等,是Java开发中的重要部分。

- 1 -。

java读取XML文件内容的四种方法

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的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。

java xml 多层实体类实例

java xml 多层实体类实例

java xml 多层实体类实例摘要:1.Java DOM4j 解析XML 实例2.DOM4j 简介3.多层实体类实例4.解析XML 文档5.实体类转换为DOM4j 节点6.遍历和操作DOM4j 节点7.结论正文:1.Java DOM4j 解析XML 实例在Java 中,DOM4j 是一个常用的XML 解析库,它可以帮助我们方便地解析和操作XML 文档。

今天我们将通过一个多层实体类的实例来学习如何使用DOM4j 解析XML 文档。

2.DOM4j 简介DOM4j 是一个Java 库,它提供了对XML 文档的解析、操作和生成等功能。

与其他XML 解析库相比,DOM4j 具有体积小、解析速度快、支持XPath 等优点。

在官方下载dom4j-1.6.1.zip 解压后,我们可以把dom4j-1.6.1.jar 加入工程中使用。

3.多层实体类实例假设我们有如下一个多层实体类,用于表示一个公司的员工信息:```javapublic class Employee {private String name;private int age;private String position;private String department;// getter 和setter 方法省略}public class Company {private String name;private int number;private List<Employee> employees;// getter 和setter 方法省略}```4.解析XML 文档假设我们有如下一个XML 文档:```xml<company><name>ABC 公司</name><number>100</number><employees><employee><name>张三</name><age>25</age><position>软件工程师</position><department>第二部门</department></employee><employee><name>李四</name><age>30</age><position>测试工程师</position><department>第一部门</department></employee></employees></company>```我们可以使用DOM4j 解析此XML 文档,并生成对应的多层实体类对象。

java解析xml详解及示例

java解析xml详解及示例

java解析xml详解及示例java 解析xml的几种方法第一种:DOMDOM的全称是Document Object Model,也即文档对象模型。

在应用程序中,基于DOM 的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。

通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的机制也被称作随机访问机制。

DOM接口提供了一种通过分层对象模型来访问XML文档信息的方式,这些分层对象模型依据XML的文档结构形成了一棵节点树。

无论XML文档中所描述的是什么类型的信息,即便是制表数据、项目列表或一个文档,利用DOM所生成的模型都是节点树的形式。

也就是说,DOM强制使用树模型来访问XML文档中的信息。

由于XML本质上就是一种分层结构,所以这种描述方法是相当有效的。

DOM树所提供的随机访问方式给应用程序的开发带来了很大的灵活性,它可以任意地控制整个XML文档中的内容。

然而,由于DOM 分析器把整个XML文档转化成DOM树放在了内存中,因此,当文档比较大或者结构比较复杂时,对内存的需求就比较高。

而且,对于结构复杂的树的遍历也是一项耗时的操作。

所以,DOM分析器对机器性能的要求比较高,实现效率不十分理想。

不过,由于DOM分析器所采用的树结构的思想与XML 文档的结构相吻合,同时鉴于随机访问所带来的方便,因此,DOM分析器还是有很广泛的使用价值的。

Java代码import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;public class DomT est1{public static void main(String[] args) throws Exception{// step 1: 获得dom解析器工厂(工作的作用是用于创建具体的解析器)DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();// System.out.println("class name: " + dbf.getClass().getName());// step 2:获得具体的dom解析器DocumentBuilder db = dbf.newDocumentBuilder();// System.out.println("class name: " + db.getClass().getName());// step3: 解析一个xml文档,获得Document对象(根结点)Document document = db.parse(new File("candidate.xml"));NodeList list = document.getElementsByTagName("PERSON");for(int i = 0; i < list.getLength(); i++){Element element = (Element)list.item(i);String content =element.getElementsByTagName("NAME").item(0).getFirstC hild().getNodeValue();System.out.println("name:" + content);content =element.getElementsByTagName("ADDRESS").item(0).getFir stChild().getNodeValue(); System.out.println("address:" + content);content =element.getElementsByTagName("TEL").item(0).getFirstChil d().getNodeValue();System.out.println("tel:" + content);content =element.getElementsByTagName("FAX").item(0).getFirstChil d().getNodeValue();System.out.println("fax:" + content);content =element.getElementsByTagName("EMAIL").item(0).getFirstC hild().getNodeValue();System.out.println("email:" + content);System.out.println("--------------------------------------");}}}Java代码import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Attr;import /doc/723478280.html,ment;import org.w3c.dom.Document;import org.w3c.dom.Element;import/doc/723478280.html,dNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;/*** 使用递归解析给定的任意一个xml文档并且将其内容输出到命令行上* @author*/public class DomT est3{public static void main(String[] args) throws Exception{DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();Document doc = db.parse(new File("student.xml"));//获得根元素结点Element root = doc.getDocumentElement();parseElement(root);}private static void parseElement(Element element){String tagName = element.getNodeName();NodeList children = element.getChildNodes();System.out.print("<" + tagName);//element元素的所有属性所构成的NamedNodeMap对象,需要对其进行判断 NamedNodeMap map = element.getAttributes();//如果该元素存在属性if(null != map){{//获得该元素的每一个属性Attr attr = (Attr)map.item(i);String attrName = attr.getName();String attrValue = attr.getValue();System.out.print(" " + attrName + "=\"" + attrValue + "\""); } }System.out.print(">");for(int i = 0; i < children.getLength(); i++){Node node = children.item(i);//获得结点的类型short nodeType = node.getNodeType();if(nodeType == Node.ELEMENT_NODE){//是元素,继续递归parseElement((Element)node);}else if(nodeType == Node.TEXT_NODE){//递归出口System.out.print(node.getNodeValue());}else if(nodeType == /doc/723478280.html,MENT_NODE) {System.out.print("System.out.print(data);System.out.print("-->");}}System.out.print("");}}第二种 sax:SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。

DOM解析XML报错Contentisnotallowedinprolog解决方案详解

DOM解析XML报错Contentisnotallowedinprolog解决方案详解

DOM解析XML报错Contentisnotallowedinprolog解决⽅案详解报错内容为:Content is not allowed in prolog. Nested exception: Content is not allowed in prolog⽹上所述总结来说就是解析内容内包含BOM。

这个标记是看不到的,流⾥⾯有这个标记⽽已。

BOM:Byte Order Mark,中⽂名字节顺序标记。

UCS规范建议在传输字节流前,先传输BOM来判断字节顺序。

其实UTF-8是不需要⽤BOM来表明字节顺序的,但是可以⽤BOM来表明编码⽅式。

BOM的UTF-8编码是EF BB BF,所以呢,如果接受者收到EF BB BF开头的字节流,就说明它是UTF-8编码了。

解决办法:如果解析的是⽂件:可以⽤UltraEdit或者EmEditor打开XML,然后另存为,保存的时候有选项是以⽆BOM的UTF-8保存还是以有BOM的UTF-8保存。

如果是从远程请求回来的内容:那么你把返回的流New为字符串,是看不到BOM的,但是你必须截取你需要的内容:if(null != result && !"".equals(result)){if(result.indexOf("<") != -1 && stIndexOf(">") != -1 && stIndexOf(">") > result.indexOf("<"))result = result.substring(result.indexOf("<"), stIndexOf(">") + 1);}也有说是DOM4J版本较低引起的,但是我看了⼀下我是⽤的版本是1.6.1,所以排除此类可能,但是在实际中我还是建议使⽤最新稳定版本来进⾏开发。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档