在JAVA中解析XML元素

问题描述:

  1. 我想解析java中的XML。它将是DOM或SAX。阅读JAXP是一本好书。另外,当我谷歌出来找到XERCES/XALAN。常用的解析器是?在JAVA中解析XML元素

  2. 在SAX解析器中,如果我注册单个元素事件,SAX解析会在遇到元素后停止处理XML消息。在书中阅读DOM读取整个XML并加载到内存中,即使我想知道单个元素的值。

  1. 你提到的所有上述解析器都非常好。如果应用程序执行了大量的XML处理,那么我的个人偏好就是XERCES,否则“内置”解析器不够好。

  2. 您将需要处理来自SAX解析器的每个事件,并忽略那些您不感兴趣的事件。您可以通过“销毁”解析器对象来停止解析。如果你只对一个大消息的一个或两个元素感兴趣,那么SAX就是要走的路。如果你对所有或大部分元素都感兴趣,那么使用DOM解析器,你可以轻微地获得性能,但是,“给我我想要的东西”API使得代码比“我要给你的东西”更清晰API。

+0

非常感谢您的信息。 XERCES是独立的JAR文件还是与JDK一起提供? JAXP比xerces更好吗?另外当我想访问一个或两个大消息的元素,如果我使用SAX解析器并销毁解析器对象,它是有效的?否则,它像DOM Parser一样工作?使用它有什么好处?另外,如果我想创建消息Web服务的SOAP消息,我可以使用xerces解析器?我应该使用什么? – Arav 2012-03-16 05:38:27

+0

SAX解析器的优势在于它可以在解析元素时为您提供这些元素。因此,如果您只是想在将xml传递到另一个进程之前知道类似国家代码的内容,那么这非常有效。另一方面,DOM解析器会构建嵌套字典和列表的复杂结构,因此您必须等待所有XML被解析,然后才能构建完整的树,然后才能访问任何元素。如果你只是想检查一个或两个元素,它非常昂贵。由于SAX是一个流解析器,您可以处理任何大小的文档。一个DOM解析器需要适应内存中的所有内容。 – 2012-03-16 07:37:14

+0

非常感谢信息 – Arav 2012-03-18 22:51:32

我想在java中解析XML。它将是DOM或SAX。在书中阅读 JAXP是一个不错的选择。另外,当我谷歌出来找到XERCES/XALAN。哪个 解析器是常用的?

Xerces是DOM和SAX的实现,它是内置于JDK中的。见javax.xml.parsers

在SAX解析器中,如果我注册单个元素事件,SAX 解析会在遇到元素后停止处理XML消息。

读一本书,即使 我想知道的单个元素值DOM读取整个XML并加载到内存中。

是的。

+0

非常感谢您的信息。 XERCES是独立的JAR文件还是与JDK一起提供? JAXP比xerces更好吗?另外当我想访问一个或两个大消息的元素,如果我使用SAX解析器并销毁解析器对象,它是有效的?否则,它像DOM Parser一样工作?使用它有什么好处?另外,如果我想创建消息Web服务的SOAP消息,我可以使用xerces解析器?我应该使用什么? – Arav 2012-03-16 05:38:52

+1

@Arav(1)正如我已经说过的,Xerces是内置于JDK中的。 JAXP是Xerces的一个包装。 (2)SAX非常适合这种用途。 (3)SAX不能像DOM那样工作,因为它不会构建DOM,它只是在文档越过它时传递事件。 (4)解析器解析现有消息,它们不创建新消息。 (5)JAXP包含一个DocumentBuilder--猜测是什么 - 构建文档;但是Java已经有API来构建SOAP请求。 – EJP 2012-03-16 06:01:35

+0

非常感谢信息 – Arav 2012-03-18 22:52:26

我不确定我是否掌握了您想要完成的所有细节,但是如果您有描述XML格式的xsd文件,我会说JAXB是要走的路。它会带你xsd并为你自动生成类。然后,您可以轻松地来回 - 编组和解组数据。 Netbeans的自动化水平最近让我印象深刻,当我解决类似的任务时

希望我的建议能够考虑JAXB是有帮助的。

+0

非常感谢JAXB的信息 – Arav 2012-03-16 05:41:31

+1

+1。除了从XML模式生成Java模型外,您还可以从您自己的域类开始,并使用JAXB注释来自定义XML表示:http://wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted/TheBasics – 2012-03-16 10:01:09

对于简单的XML POJO,我发现XStream把是最恼人的所有解析器的用Java:

http://x-stream.github.io/

+0

非常感谢您的信息 – Arav 2012-03-16 05:40:44

DOM和SAX的接口,Xerces的是目前最流行的实现这些接口。实际上有两个版本的Xerces:一个来自Apache,另一个来自Sun/Oracle JDK。 JDK中的一个是越野车;优先使用Apache中的一个。

由于您刚刚起步,因此它可能比DOM和SAX更为广泛。 SAX是一个非常低级的接口,提供了很好的性能,但功能很少:如果这是您的方式,您可以期望在应用程序中编写相当多复杂的代码。 DOM为您提供了一个XML树形模型,但是有更多更好更简单的接口可以做同样的事情:JDOM提供了您需要的一切,并且比DOM更易于使用。

+0

非常感谢您的信息。 – Arav 2012-03-20 05:31:18