解析XML有两种基本方式:
1)DOM
2)SAX
DOM解析器把 XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用 navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。
SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码
工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。
通俗点讲,Dom 解析器是将xml文档整个读入内存中以便查找,而SAX解析器只是依次解析读到的tag数据,当找到想要的数据时便可停止解析,不用读取整个XML文档至内存。有很多开源项目提供了各种用于解析xml的包,其原因无非是在dom和sax的原理基础上做一些优化工作。
Java中比较常用的操作xml的开源包有 dom4j、JDOM、Crimson、Commons-Digester等等。。(后两者均为apache开源包)。
当然JAVA 里也自带了一些包用于解析、保存xml:javax.xml包、org.w3c.dom、org.xml.sax,更多具体的操作方法可以查看java api文档(这几个包都是内置的,官方API文档里就其详尽的包描述)
这里我们使用javax.xml,org.w3c.dom,给出如何创建Dom树、如何从.xml文件中生成Dom树,如何将Dom树保存到xml文件中。
生成一个Document空的文档对象:
org.w3c.dom.Document doc = javax.xml.parsers.DocumentBuilderFactory.newInstance().
newDocumentBuilder().newDocument();
可以这样理解和记忆:要建立一个Document对象(这是一个产品),那么先要有一个工厂DocumentBuilderFactory,由工厂“招聘 “一个制造者DocumentBuilder,然后由制造者来生产Document对象。
工厂DocumentBuilderFactory没有公有的构造方法,只能用newInstance()取得一个工厂。同样DocumentBuilder也没有公共构造方法。这里涉及到设计模式里的“工厂方法模式”和“单态模式”,这样做的意义我们以后将在“设计模式”一块给出。
从.xml文件中生成Document对象:
javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(“fileName”));
其中parse方法可以是多种参数,可参看java api文档。
取得根结点:
doc.getDocumentElement().childNodes().item(0);
可以看到对dom树操作就类似于在javascript里用dom api操作xml了,事实上,两者都是有w3c标准化组织提供的。
文件存放xml Document对象。
javax.xml.transform.Transformer tf =
javax.xml.transform.TransformerFactory.newInstance().newTransformer();
tf.transform(new javax.xml.transform.dom.DOMSource(doc),
new javax.xml.transform.stream.StreamResult(new FileOutputStream(fileName)));
下面是一些简单的包装过的方法:
/**
*将dom树对象 doc存入fileName提定的文件中
**/
public void saveToFile(Document doc, String fileName) throws TransformerFactoryConfigurationError, FileNotFoundException, TransformerException{
javax.xml.transform.Transformer trans = javax.xml.transform.TransformerFactory.newInstance().newTransformer();
trans.transform(new javax.xml.transform.dom.DOMSource(doc),
new javax.xml.transform.stream.StreamResult(new FileOutputStream(fileName)));
}
/**
*生成一个带根结点名为 rootName的Dom树对象。
**/
public Document createXMLDoc(String rootName) throws FileNotFoundException, SAXException, IOException, ParserConfigurationException{
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
doc.appendChild(doc.createElement(rootName));
return doc;
}
/**
*由给定文件名的xml文件生成一个Dom 树。
*/
public Document createXMLFromFile(String fileName) throws SAXException, IOException,
ParserConfigurationException {
File xmlFile = new File(fileName);
if (!xmlFile.exists()) {
System.err.println("File " + fileName + "doesn't exist!");
System.exit(0);
}
return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(
fileName);
}
相关推荐
使用SAX DOM两种解析方式解析文件
XML解析,有MSXML解析,和CMauk解析两种实例
在 XML 文件解析中,主要有两种解析方式:DOM(Document Object Model)和 SAX(Simple API for XML)。DOM 是一种基于树的解析方式,将 XML 文件解析成一个树状结构,然后对树中的节点进行操作。SAX 是一种基于事件...
在JAVA中有两种常见的XML解析方式,DOM和SAX,DOM在解析的时候会将所有的数据一次性载入内存中进行解析,在数据量比较大的情况下,效率非常低.尤其在手机这种对内存和性能要求比较苛刻的设备里面这种方法并不可取. ...
python解析xml文件,python语言解析xml文件的常用的有两种方式: 通过MiniDom库解析xml文件 通过ElementTree库解析xml文件
解析XML文件(字符串)的两种方法,dom4j解析XML时候忽略DTD文件验证
XML学习笔记(包括Java的两种解析XML的方法)。 XML基础语法的介绍,DTD的介绍和使用。 可快速入门,也可当手册使用。
dom4j---xml解析包,xml解析和以及使用java编写生成xml文件,两种使用方式,复杂和简单,必备神器
两种解析xml方式的 demo,log4j,xmlbean等都是采用的最基础的方式。
支持SAX解析XML文件,DOM解析XML文件,Pull解析器解析XML文件,Pull生成XML文件,JAVA和Kotlin两种语言编写
xml的两种解析方式sax解析和dom解析的源代码
Java 解析 XML 文件的 DOM 和 SAX 方式是指在 Java 中使用 Document Object Model(DOM)和 Simple API for XML(SAX)两种方式来解析 XML 文件的技术。下面将详细介绍这两种方式的原理、实现和优缺点。 DOM 方式 ...
xml解析的两种常用方式, DOM解析:一次性将整个XML文档加载进内存,比较适合解析小文件,例如:GDataXml解析 SAX解析:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件,例如:NSXMLParser解析
这个是关于DTD文档的编写,约束XML的格式,以及新版的约束文档schema类型的约束,包括DOM解析xml、JDOM解析xml的源码带详细注释
使用 JDOM 库解析 XML 文件是一种简单易用的方式,能够快速地解析和处理 XML 文件,并且提供了高效的解析性能。 JDOM 库的应用场景 JDOM 库广泛应用于各种 Java 项目中,例如: * XML 配置文件解析 * 数据交换和 ...
解析Xml有三种方式可选,sax ,dom ,pull ,,各有各的优点,但在android上是不推荐使用DOM来解析的 一般都用SAX和PULL 这两个性能相近, SAX的解析方式大家可以去看MARS的教程 讲的也比较好喔 PULL的话我个人觉得处理...
详解Java解析XML的四种方法详解Java解析XML的四种方法详解Java解析XML的四种方法详解Java解析XML的四种方法详解Java解析XML的四种方法
xml数据前后台解析;提供了两种方式:dom4j与jdom对xml文件、xml字符串的读与写操作;同时实现在前台用jquery解析xml,将数据展示在页面上,程序可以跑
iPhone IOS XML 解析 源代码 里面含有两种解析XML的代码然后进行性能对比
DOM解析XML文件 JDOM解析XML文件