如何使用Java解析XML?

   TL1 10.05.2.3 2001 agent  get ...........  ........... ........... .......... .....   .......     TL1 10.5.2.98 2001 agent  get ...........  ........... ........... .......... .....   ....... ....... .......     

我想知道如何使用Java解析这个XML。 这样我可以使用该数据,因为它对我的程序使用相同的方式。 我知道如何解析它,但问题是每个命令可能有不同数量的数据块。 因此在解析之后我需要为各自的命令使用相应的数据块。 我的意思是在重新启动时第一个命令我应该只获得一个数据块值,而第二个命令则获得3个数据块,依此类推。 请让我知道解决此问题的任何示例代码。

解析XML有两种基本方法。

  1. 基于游标(StAX)或事件(SAX)的方法。 更轻巧但通常更冗长。 当你只想抓住小零件或加工很容易时,这一点特别好; 和
  2. 基于树的方法(DOM)。 通常,DOM解析器无论如何都是建立在SAX / StAX解析器之上的。 它们需要更多处理,并且通常要求您在执行任何操作之前将整个文档放在内存中(而SAX / StAX可以更高效,更快速地响应)。 但这对于“随机”访问文档部分很有用。

选择最适合您情况的选择。

最简单的方法是将文档加载为DOM文档

然后使用XPath获取所需内容

 Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputStream); NodeList nodeList = XPathAPI.selectNodeList(document, "/sys"); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); System.out.println(node.getTextContent()); } 

在这里查看xpath教程。

您可以考虑使用Xpath(它属于本主题中由cletus列出的“基于树的方法”)。 如果你想要的只是从xml文档中获取 ,这是最方便/最简单的方法。

这是一些有用的Xpath教程:
要学习语法: http : //www.w3schools.com/Xpath/
要学习如何在Java中使用: http : //www.ibm.com/developerworks/library/x-javaxpathapi.html

您是否只是在寻找一个允许您将xml读入对象图形的库?

在这里查看许多解析器的列表: http : //java-source.net/open-source/xml-parsers

一个非常常用的库:

dom4j: http : //www.dom4j.org/

另一个问题: 最快的XML解析器,用于Java中的小型简单文档

使用DOM(文档对象模型)解析器或SAX(Simple API for XML)解析器来解析您的xml文档。 首先创建一个xml文档。 (扩展名为.xml的文件)从http://archive.apache.org/dist/xml/xerces-j/链接下载解析器并解析文档

如cletus所述,您必须在基于事件的方法或您必须遍历的DOM树之间进行选择。 将基于事件的场景视为某种状态机,当您输入元素“payload_block”时,您设置相应的属性,只要它已设置并且“data_block”中的事件进入,您就会将它们读取为long来自playload_block的关闭事件来了。

当您遍历树时,您将读取“payload_block”的子项并期望一个可以迭代并收集数据的列表。

很难说出实际问题。 为简单起见,我将构建一个DOM树并从该结构中读取数据。

TL1Command的典型类可能如下所示:

 class TL1Command { String type; String commandLine; StagingBlock stagingBlock; List dataBlocks; } 

该结构足够灵活,可以处理每个TL1Command中不同数量的数据块。 (是那个问题吗?)

当你非常了解你的文件结构时,我非常喜欢(而且只是我的观点)SAX方法。这里有一个链接,可以帮助你SAX2教程

如果您只需要将XML片段放入/取出对象图,那么您可以考虑使用XStream这是一个简单的轻量级编组/解组库。

您可能想要使用JAXB

您可能还想了解vtd-xml ,另一个开源XML解析/索引库…

正是出于这个原因,我写了一个非常简单的API。 它使用下面的DOM解析器,但是公开了一个非常简单易用的API,它允许您非常轻松地获取XML数据。 它只是一个Java文件,您可以在代码中用作库。 希望有所帮助。

http://argonrain.wordpress.com/2009/10/27/000/