java中四种主流xml解析方式介绍

1.DOM

DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。 即最通用,最原生的xml解析方式,由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。

 

优点:解析时,会将整个xml文档载入内存中,这一特点,即可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,另外由于DOM方式是W3C标准,后续的各种方式基本多少会借鉴参考与它,所以它使用起来也要比较简单。

缺点:由于解析时,会装在整个xml文件,假使xml结构复杂且巨大,难免对性能上,有一定的影响。(缺点本身又是优点,是不是很矛盾呢,>…<)

2.SAX

SAX解析器采用了基于事件的模型,所以它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到,更因它的此特性,开发人员可以选择性的处理自己需要的数据,这一扩展性一定程度上加大了使用SAX解析器的难度,而且很难同时访问同一个文档中的多处不同数据。

 

优点:分析能够立即开始,而不需要像DOM一样,装载整个文档。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点,并且可以随时停止解析,及时返还占用的系统资源。在速度效率和资源占用这几点上,完胜于DOM,这也为它博得了更多的开发人员的亲睐。

缺点:很难同时访问文档中的各处不同的数据,因为它不会装载整个文档,相对的,修改方面也不算方便,且难度上比DOM稍高。

 

 

 

3.JDOM

java官方指定的文档模型,并最终用于java标准扩展。它简化与XML的交互并且比使用DOM实现更快。大量使用具体类而不是提供接口,大大简化了API,且更贴近java开发者的使用。

JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错误)。这也许是比学习DOM或JDOM接口都更有意义的工作。 且他还是apache许可证下的可发布的开源项目

 

优点:使用上更简化,性能比DOM更加好,官方文档声明,只需花20%的精力,以解决80%的实际问题。

缺点:扩展性较差

 

 

 

 

4.DOM4J

集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。复杂的API使他在功能性和扩展上大大超出了JDOM,开发中其性能优异、功能强大和极端易用使用,同时它也是一个开放源代码的软件,让它在各种解析方式中,占领了最多的开发者的拥护。

 

优点:以上以阐明

缺点:在拥护者心中(没有,(*^__^*) )

 

 

具体解析方式,见下篇

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java解析XML文件,可以使用Java自带的DOM和SAX解析器。下面是使用DOM解析XML文件的示例代码: ``` import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; import java.io.File; public class ParseXML { public static void main(String argv[]) { try { File fXmlFile = new File("file.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("student"); System.out.println("-----------------------"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); System.out.println("\nCurrent Element :" + nNode.getNodeName()); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println("Student roll no : " + eElement.getAttribute("rollno")); System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent()); System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent()); System.out.println("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent()); System.out.println("Marks : " + eElement.getElementsByTagName("marks").item(0).getTextContent()); } } } catch (Exception e) { e.printStackTrace(); } } } ``` 该示例代码使用DOM解析解析一个名为file.xmlXML文件,该文件包含学生信息。在输出结果,可以看到解析器正确地提取了文信息,例如学生的名字和姓氏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值