This is my Blog!!Welcome to you!!
【分享个人java学习心得和技术问题汇总】

java解析xml常用的三种方法

java解析xml常用的三种方法 - - ITeye技术网站

(I)Java通过DOM解析XML

1>得到DOM解析器的工厂实例
DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
得到javax.xml.parsers.DocumentBuilderFactory;类的实例就是我们要的解析器工厂
2>从DOM工厂获得DOM解析器
DocumentBuilder dombuilder=domfac.newDocumentBuilder();
通过javax.xml.parsers.DocumentBuilderFactory实例的静态方法newDocumentBuilder()得到DOM解析器3>把要解析的XML文档转化为输入流,以便DOM解析器解析它
InputStream is=new FileInputStream(“bin/library.xml”);
InputStream是一个接口。

4>解析XML文档的输入流,得到一个Document
Document doc=dombuilder.parse(is);
由XML文档的输入流得到一个org.w3c.dom.Document对象,以后的处理都是对Document对象进行的
5>得到XML文档的根节点
Element root=doc.getDocumentElement();
在DOM中只有根节点是一个org.w3c.dom.Element对象。6>得到节点的子节点
NodeList books=root.getChildNodes();
for(int i=0;i<books.getLength();i++){
Node book=books.item(i);
}
这是用一个org.w3c.dom.NodeList接口来存放它所有子节点的,还有一种轮循子节点的方法,后面有介绍

7>取得节点的属性值
String email=book.getAttributes().getNamedItem(“email”).getNodeValue();
System.out.println(email);
注意,节点的属性也是它的子节点。它的节点类型也是Node.ELEMENT_NODE

8>轮循子节点
for(Node node=book.getFirstChild();node!=null;node=node.getNextSibling()){

if(node.getNodeType()==Node.ELEMENT_NODE){

if(node.getNodeName().equals(“name”)){

String name=node.getNodeValue();

String name1=node.getFirstChild().getNodeValue();

if(node.getNodeName().equals(“price”)){

String price=node.getFirstChild().getNodeValue();

 

 

 


 

 

java解析xml常用的三种方法 – – ITeye技术网站

(II)Java通过SAX解析XML
    Simple API for XML(简称SAX)是个循序存取XML的解析器API。     一个实现SAX的解析器(也就是“SAX Parser”)以一个串流解析器的型式作用,拥有事件驱动API。由使用者定义回调函数,解析时,若发生事件的话会被调用。SAX事件包括:

  • XML 文字 节点
  • XML 元素 节点
  • XML 处理指令
  • XML 注释

 

java解析xml常用的三种方法 – – ITeye技术网站

此为下面即将解析度简单xml结构,并将其封装成一个User对象。

 

 

java解析xml常用的三种方法 – – ITeye技术网站

[优点]

(1).节约内存开销

SAX解析器在某些方面优于DOM风格解析器,因为SAX解析器的内存使用量一般远低于DOM解析器使用量。DOM解析器在任何处理开始之前,必须将xml以整棵树放在内存,所以DOM解析器的内存使用量完全根据输入资料的大小。相对来说,SAX解析器的内存内容,是只基于XML档案的最大深度(XML树的最大深度)和单一XML项目上XML属性储存的最大资料。

(2)解析速度快

因为SAX事件驱动的本质,处理文件通常会比DOM风格的解析器快。

[缺点]

SAX事件驱动的模型对于XML解析很有用,但它确实有某些缺点。

某些种类的XML验证需要存取整份文件。例如,一个DTD IDREF属性需要文件内有项目使用指定字串当成DTD ID属性。要在SAX解析器内验证,必须追踪每个之前遇过的ID和IDREF属性,检查是否有任何相符。更甚者,一个IDREF找不到对应的ID,使用者只会在整份文件都解析完后才发现,若这种连结对于建立有效输出是重要的,那用在处理整份文件的时间只是浪费。

另外,某些XML处理仅要求存取整份文件。举例来说,XSLT及XPath需要能够任何时间存取任何解析过的XML树。当SAX以用来建构此树时,DOM解析器在设计上已经是如此了。

 

 

 

未经允许不得转载:Java学习 » java解析xml常用的三种方法

分享到:更多 ()