Java解析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运算。

Java解析XML的四种方式

Java解析XML的四种方式

Java解析XML的四种方式在平时工作中,难免会遇到把XML 作为数据存储格式。

面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,对这四种主流方案做一个不完全评测,仅仅针对遍历XML 这块来测试,因为遍历XML 是工作中使用最多的。

预备XML 文件格式如下:<?xml version="1.0" encoding="GB2312"?><RESULT><V ALUE><NO>A1234</NO><ADDR>四川省XX县XX镇XX路X段XX号</ADDR></V ALUE><V ALUE><NO>B1234</NO><ADDR>四川省XX市XX乡XX村XX组</ADDR></V ALUE></RESULT>测试首先出场的是DOM(JAXP Crimson 解析器)DOM 是用与平台和语言无关的方式表示XML 文档的官方W3C 标准。

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

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

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

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

DOM 以及广义的基于树的处理具有几个优点。

首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。

它还可以在任何时候在树中上下导航,而不是像SAX 那样是一次性的处理。

DOM 使用起来也要简单得多。

另一方面,对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好。

这些基于事件的模型,比如SAX。

Bean文件:package com.test;import java.io.*;import java.util.*;import org.w3c.dom.*;import javax.xml.parsers.*;public class MyXMLReader{public static void main(String arge[]){long lasting =System.currentTimeMillis();try{File f=new File("data_10k.xml");DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();Document doc = builder.parse(f);NodeList nl = doc.getElementsByTagName("VALUE");for (int i=0;i<nl.getLength();i++){System.out.print("车牌号码:" +doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());System.out.println(" 车主地址:" +doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());}}catch(Exception e){e.printStackTrace();}System.out.println("运行时间:"+(System.currentTimeMillis() - lasting)+" 毫秒");}}10k消耗时间:265 203 219 172100k消耗时间:9172 9016 8891 90001000k消耗时间:691719 675407 708375 73965610000k消耗时间:OutOfMemoryError接着是SAX这种处理的优点非常类似于流媒体的优点。

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 xmlparser用法

java xmlparser用法

文章标题:深入探讨Java XML解析器的使用方法与技巧一、引言:解析XML在Java中的重要性XML作为一种可扩展的标记语言,被广泛应用于数据交换和存储的场景中。

在Java开发中,对XML的解析是一项非常常见的任务,它涉及到从XML文档中提取数据、修改数据以及创建新的XML文档等方面。

对于Java开发者来说,掌握XML解析器的使用方法与技巧是非常重要的。

二、Java中常见的XML解析器介绍在Java中,常见的XML解析器主要包括DOM解析器、SAX解析器和StAX解析器。

下面将针对这三种解析器进行详细介绍,并分别分析它们的优缺点和适用场景。

1. DOM解析器DOM(Document Object Model)解析器将整个XML文档解析成内存中的一个树形结构,因此适合于对XML文档进行随机访问和修改。

但是,由于DOM解析器需要将整个文档加载到内存中,对于大型XML文档来说,可能会占用过多的内存,因此不适合对大型XML文档进行解析。

2. SAX解析器SAX(Simple API for XML)解析器是一种基于事件驱动的解析器,它逐行解析XML文档,只在遇到标签开始、标签结束和文本内容时触发相应的事件,从而大大减小了内存开销。

SAX解析器适合用于对大型XML文档进行顺序读取和简单处理。

3. StAX解析器StAX(Streaming API for XML)解析器是一种基于迭代器的解析器,它允许开发者以类似流的方式读写XML文档,同时也支持部分随机访问功能。

由于StAX解析器结合了DOM和SAX解析器的优点,因此在某些场景下可以取得很好的效果。

三、Java中使用XML解析器的常见场景和技巧1. 选择合适的解析器在实际开发中,选择合适的解析器非常重要。

如果需要对XML文档进行较为复杂的处理,并且内存资源充足,那么可以选择DOM解析器;如果需要对大型XML文档进行顺序读取和简单处理,那么可以选择SAX解析器;如果需要兼顾随机访问和内存占用的平衡,那么可以选择StAX解析器。

Java动态生成和解析xml文件步骤详解

Java动态生成和解析xml文件步骤详解

Java动态⽣成和解析xml⽂件步骤详解⾸先声明,这个地⽅是利⽤dom4j进⾏解析和⽣成,需要⽤到dom4j的jar包,所以⾸先需要我们获取jar包:<dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency>⽣成xml⽂件代码案列:package day12;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;/*** 写出XML⽂档*/public class WriteXmlDemo {public static void main(String[] args) {List<Emp> empList = new ArrayList<Emp>();empList.add(new Emp(1,"张三",22,"男",3000));empList.add(new Emp(2,"李四",23,"⼥",4000));empList.add(new Emp(3,"王五",24,"男",5000));empList.add(new Emp(4,"赵六",25,"⼥",6000));empList.add(new Emp(5,"钱七",26,"男",7000));empList.add(new Emp(6,"传奇",21,"男",8000));/** 写出XML⽂档的⼤致步骤* 1.创建空⽩⽂档对象Document* 2.向该⽂档中添加根元素* 3.按照规定的XML⽂档结构从根元素开始,逐级添加⼦元素,已完成该结构* 4.创建XMLWriter* 5.将Document对象写出成XML⽂档* 6.将XMLWriter关闭*///1Document doc = DocumentHelper.createDocument();/** 2.Element addElement(String name)* Document提供的该⽅法是⽤来向当前⽂档中添加给定名字的根元素。

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中使用xpath对xml解析

在Java中使用xpath对xml解析

在Java中使⽤xpath对xml解析个⼈博客地址:xpath是⼀门在xml⽂档中查找信息的语⾔。

xpath⽤于在XML⽂档中通过元素和属性进⾏导航。

它的返回值可能是节点,节点集合,⽂本,以及节点和⽂本的混合等。

在学习本⽂档之前应该对XML的节点,元素,属性,⽂本,处理指令,注释,根节点,命名空间以及节点关系有⼀定的了解以及对xpath也有了解。

XML学习地址:xpath基本语法学习地址:xpath官⽅⽂档:https:///cvc4tEIGy5EvS访问密码 9d16本⽂主要介绍:Java中使⽤xpath操作对xml操作。

1)⾸先在dom4j中如何使⽤xpath技术导⼊xPath⽀持的jar包。

jaxen-1.1-beta-6.jar(⾸先要先导⼊dom4j包,dom4j下载地址:/dom4j-1.6.1/)。

导包之后如图所⽰:如果不知道怎样导包请参考我以前的⼀篇博客:2)在Java中使⽤xpath⽅法,主要有两点:List<Node> selectNodes("xpath表达式"); 查询多个节点对象Node selectSingleNode("xpath表达式"); 查询⼀个节点对象下⾯就⽤实例说明使⽤⽅法。

⼀、selectNodes使⽤⽅法:1package com.vastsum.demo;23import java.io.File;4import java.io.FileOutputStream;5import java.util.List;67import org.dom4j.Document;8import org.dom4j.Element;9import org.dom4j.Node;10import org.dom4j.io.OutputFormat;11import org.dom4j.io.SAXReader;12import org.dom4j.io.XMLWriter;1314/**15 *16 * @author shutu00817 *selectNode的使⽤⽅法18*/19public class xpathDemo {2021public static void main(String[] args) throws Exception {2223 Document doc = new SAXReader().read(new File("./src/contact.xml"));2425/**26 * @param xpath 表⽰xpath语法变量27*/28 String xpath="";2930/**31 * 1. / 绝对路径表⽰从xml的根位置开始或⼦元素(⼀个层次结构)32*/33 xpath = "/contactList";34 xpath = "/contactList/contact";3536/**37 * 2. // 相对路径表⽰不分任何层次结构的选择元素。

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技术和数据库技术来完成整个处理流程。

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

Java解析XML文件==========================================xml文件<?xml version="1.0" encoding="GB2312"?><RESULT><VALUE><NO>A1234</NO><ADDR>四川省XX县XX镇XX路X段XX号</ADDR></VALUE><VALUE><NO>B1234</NO><ADDR>四川省XX市XX乡XX村XX组</ADDR></VALUE></RESULT>==========================================1)DOM(JAXP Crimson解析器)DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。

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

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

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

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

DOM以及广义的基于树的处理具有几个优点。

首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。

它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。

DOM使用起来也要简单得多。

import java.io.*;import java.util.*;import org.w3c.dom.*;import javax.xml.parsers.*;public class MyXMLReader{public static void main(String arge[]){long lasting =System.currentTimeMillis();try{File f=new File("data_10k.xml");DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();Document doc = builder.parse(f);NodeList nl = doc.getElementsByT agName("VALUE");for (int i=0;i<nl.getLength();i++){System.out.print("车牌号码:" +doc.getElementsByT agName("NO").item(i).getFirstChild().getNodeValue());System.out.println("车主地址:" + doc.getElementsByT agName("ADDR").item(i).getFirstChild().getNodeValue());}}catch(Exception e){e.printStackTrace();}==========================================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的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。

SAX 对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。

但用SAX 解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。

import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;public class MyXMLReader extends DefaultHandler {java.util.Stack tags = new java.util.Stack();public MyXMLReader() {super();}public static void main(String args[]) {long lasting = System.currentTimeMillis();try {SAXParserFactory sf = SAXParserFactory.newInstance();SAXParser sp = sf.newSAXParser();MyXMLReader reader = new MyXMLReader();sp.parse(new InputSource("data_10k.xml"), reader);} catch (Exception e) {e.printStackTrace();}System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");} public void characters(char ch[], int start, int length) throws SAXException {String tag = (String) tags.peek();if (tag.equals("NO")) {System.out.print("车牌号码:" + new String(ch, start, length));}if (tag.equals("ADDR")) {System.out.println("地址:" + new String(ch, start, length));}}public void startElement(String uri,String localName,String qName,Attributes attrs) { tags.push(qName);}}==========================================3)JDOM JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。

由于是第一个Java特定模型,JDOM一直得到大力推广和促进。

正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。

从2000年初就已经开始了JDOM开发。

JDOM与DOM主要有两方面不同。

首先,JDOM仅使用具体类而不使用接口。

这在某些方面简化了API,但是也限制了灵活性。

第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。

JDOM对于大多数Java/XML应用程序来说当然是有用的,并且大多数开发者发现API比DOM容易理解得多。

JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。

然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错误)。

这也许是比学习DOM或JDOM接口都更有意义的工作。

JDOM自身不包含解析器。

它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。

它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。

JDOM是在Apache许可证变体下发布的开放源码。

import java.io.*;import java.util.*;import org.jdom.*;import org.jdom.input.*;public class MyXMLReader {public static void main(String arge[]) {long lasting = System.currentTimeMillis();try {SAXBuilder builder = new SAXBuilder();Document doc = builder.build(new File("data_10k.xml"));Element foo = doc.getRootElement();List allChildren = foo.getChildren();for(int i=0;i<allChildren.size();i++) {System.out.print("车牌号码:" + ((Element)allChildren.get(i)).getChild("NO").getText());System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());}} catch (Exception e) {e.printStackTrace();}}==========================================4)DOM4J 虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。

相关文档
最新文档