在 JAVA 中处理包含 XML 的字符串的最有效方法
Posted
技术标签:
【中文标题】在 JAVA 中处理包含 XML 的字符串的最有效方法【英文标题】:Most effective way to process a string containing XML, in JAVA 【发布时间】:2010-10-26 19:26:10 【问题描述】:我有一个字符串,其中包含 XML 节点,并且正在寻求使用 DOM 解析来处理此字符串以提取节点值并将它们存储在局部变量中。
存储在 String 变量中的 XML:
<carGarage>
<car>
<make>Chrysler</make>
<color>Red</color>
</car>
<car>
<make>Musano</make>
<color>Blue</color>
</car>
</carGarage>
我想要提取 XML 值并将它们存储在本地属性中的 Java 类:
public class CarGarage
String make, color;
public void setMake(String make)
this.make = make;
public void setColor(String color)
this.color = color;
public void DOMparsingMethod(Node thisNode)
int typeOfNode = thisNode.getNodeType();
...
解决此问题的最佳方法是什么? 我看过 StringBufferInputStream 但已弃用。 我真的很迷茫。
谢谢你, 卢卡斯。
【问题讨论】:
【参考方案1】:看看使用DocumentBuilder 解析任何类型的输入流。这是一个example,它从文件中读取像你这样的类。
【讨论】:
嗨贾斯汀,我一直在使用 DocumentBuilderFactory 和 Document Builder,但是当我将值打印出来时,它得到 [#DOCUMENT: NULL]...这可能是因为我没有返回文档元素节点,但它下面的第一个子节点,在本例中是有很多 object-to-xml 绑定库可以完全满足您的需求,但它们往往是相当庞大的工具。
对于这个简单的例子,自己处理 dom 是有意义的。 justinhj 对此的内置 java 库的建议是一个好的开始,尽管这有时也会变得丑陋,因为 jdk 通常不为您提供 xml 解析器,需要您在幕后神奇地插入自己的。
对于这类事情,我更喜欢jdom。它实际上与 DocumentBuilder 路由相同,但相似且仅部分兼容。
【讨论】:
【参考方案3】:为什么要使用 DOM?
如果您只是想读入并将 xml 转换为对象,那么我建议您使用 STAX,因为 SAX 比 DOM 快,但是编码太多,STAX 更好,您可以在下面了解更多信息。 https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/programming-and-development/?p=639
【讨论】:
我个人会选择 SAX (xerces.apache.org/xerces-j),因为我已经习惯了,而且我不认为 SAX 编码太多,因为它的代码比较简单,而且不像 stax ,它是与模式无关的代码(无论其价值如何)。 我使用 SAX 多年,但我发现 Stax 更简单,所以我更喜欢它,因为对于 sax,我编写了自己的代码来处理所有事情。【参考方案4】:根据我的经验,DOM 对这类事情很有用,因为与 SAX / STAX 相比,它的学习曲线较低,尽管它的速度或内存效率不高。获得 DOM 文档后,您可以对文档使用 XPath 查询来获取单个元素内容并对其进行解析。
【讨论】:
【参考方案5】:我建议你看看XStream。它支持将 XML 转换为对象。你可以给它 XML,它会给你一个你想要的对象列表。
【讨论】:
以上是关于在 JAVA 中处理包含 XML 的字符串的最有效方法的主要内容,如果未能解决你的问题,请参考以下文章
使用 C#,将包含二进制数据的字符串转换为字节数组的最有效方法是啥