如何使用Java解析XML?
<?xml version="1.0" ?>
<input>
<sys>
<protocol>TL1</protocol>
<ipAddress>10.05.2.3</ipAddress>
<port>2001</port>
<prompt>agent</prompt>
<TL1Command>
<type>get</type>
<command_code>...........</command_code>
<staging_block>
<tid>...........</tid>
<aid>...........</aid>
<ctag>..........</ctag>
<gen_block>.....</gen_block>
</staging_block>
<payload_block>
<data_block>.......</data_block>
</payload_block>
</TL1Command>
</sys>
<sys>
<protocol>TL1</protocol>
<ipAddress>10.5.2.98</ipAddress>
<port>2001</port>
<prompt>agent</prompt>
<TL1Command>
<type>get</type>
<command_code>...........</command_code>
<staging_block>
<tid>...........</tid>
<aid>...........</aid>
<ctag>..........</ctag>
<gen_block>.....</gen_block>
</staging_block>
<payload_block>
<data_block>.......</data_block>
<data_block>.......</data_block>
<data_block>.......</data_block>
</payload_block>
</TL1Command>
</sys>
</input>
我想知道如何使用Java来解析这个XML。这样我就可以像我的程序一样使用这些数据。我知道如何解析它,但问题是每个命令可能有不同数量的数据块。所以在解析之后,我需要为各个命令使用各自的数据块。我的意思是第一个命令,而回顾时,我应该只得到一个数据块值和第二个命令3个数据块等。请让我知道解决此问题的任何示例代码。如何使用Java解析XML?
有来解析XML两种基本方法。
- 基于游标(StAX)或事件(SAX)的方法。更轻量但通常更冗长。当你只想抓取小零件或加工很简单时,这是特别好的;和
- 基于树的方法(DOM)。通常,DOM解析器是建立在SAX/StAX解析器之上的。他们需要更多的处理,并且通常需要您在执行任何操作之前将整个文档存储在内存中(而SAX/StAX可以更有效且更快速地响应)。但是这对于随机访问文件部分很有用。
选择哪种是最适合你的情况。
另一个开源的xml解析器是vtd-xml,这被认为比DOM,SAX和Pull更高级一些 – 2009-11-23 02:32:05
可以考虑的XPath(它属于作为本主题中列出由cletus“树为基础的方法”)。如果您只想获取值,那么这是最方便/最简单的方法。
以下是一些有用的XPath教程:
要了解语法:http://www.w3schools.com/Xpath/
要了解如何在Java中使用:http://www.ibm.com/developerworks/library/x-javaxpathapi.html
正如克莱描述,你有基于事件的方法或之间进行选择DOM树必须遍历。考虑基于事件的场景作为某种状态机,当你输入元素“payload_block”时,你设置了一个相应的属性,只要它被设置并且来自“data_block”的事件进来,你就会读它们很长时间作为来自playload_block的关闭事件。
当你遍历树,you'll读“payload_block”的孩子,希望你可以遍历并收集数据的列表。
很难说实际的问题。为了简单起见,我会构建一个DOM树并从该结构中读取数据。
为TL1Command一个典型的类,然后可能看起来像:
class TL1Command {
String type;
String commandLine;
StagingBlock stagingBlock;
List<DataBlock> dataBlocks;
}
这种结构具有足够的灵活性来处理每个TL1Command数据块个数不同。 (是,这个问题?)
最简单的方法是将文件加载的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教程here。
你只是寻找一个库,将允许你将xml读入一个对象图?
在这里看到许多解析器的列表:http://java-source.net/open-source/xml-parsers
一个非常常用的库:
的dom4j:http://www.dom4j.org/
另一个SO问题:Fastest XML parser for small, simple documents in Java
兼用DOM(文档对象模型)解析器或SAX(简单API for XML)解析器来解析您的xml文档。 首先创建一个xml文档。 (带有扩展名为.xml文件) 从链接http://archive.apache.org/dist/xml/xerces-j/ 下载解析器和解析文档
我写了一个非常简单的API正是这个原因。它使用下面的DOM解析器,但公开了一个非常简单且易于使用的API,它可以让您轻松获取XML数据。它只是一个单独的Java文件,您可以在代码中用作库。希望有所帮助。
您尝试了哪些解析器?我不明白你是如何使用数据的 – Mark 2009-11-12 13:25:10
我真的很喜欢JIBX(http://jibx.sourceforge.net/),这要感谢*.com :) – Trick 2009-11-12 17:25:25