我目前正在使用 JDOM 进行一些简单的 XML 解析,似乎没有什么是类型安全的 - 我在使用内置 Java DOM 解析器时遇到了类似的问题,只是需要处理更多的 API。
例如,XPath.selectNodes
以anObject
为参数,返回一个原始列表,感觉有点Java 1.1
是否有用于 Java 的通用化 XML 和 XPath 库,或者是否有某些原因无法以类型安全的方式进行 XPath 查询?
我目前正在使用 JDOM 进行一些简单的 XML 解析,似乎没有什么是类型安全的 - 我在使用内置 Java DOM 解析器时遇到了类似的问题,只是需要处理更多的 API。
例如,XPath.selectNodes
以anObject
为参数,返回一个原始列表,感觉有点Java 1.1
是否有用于 Java 的通用化 XML 和 XPath 库,或者是否有某些原因无法以类型安全的方式进行 XPath 查询?
AFAIK java 中的所有 xml 查询都是非类型安全的,并且大多数都与 java 1.3 兼容。也就是说,我最喜欢的解析器/生成器是xml 拉解析器 (xmlpp)样式解析器。如果您使用的是 1.6,我相信 java 具有 XmlStreamReader 和 XmlStreamWriter,它们与 xmlpp 库几乎相同。我特别喜欢我可以编写一个 getFoo 方法,它接受一个流读取器并从中提取并返回一个 Foo 对象。它是 DOM 和 SAX 之间最好的。我认为它可能被某些人称为 StAX。
我有点闲,所以我现在要辞职
如果您熟悉 HTML 上的 CSS 选择器,那么知道Jsoup 也支持 XML 可能会很好。
更新:好的,这显然是一个非常有争议的答案。然而,当您只想选择节点值时,它最终可能比 Xpath 更容易且更简洁。Jsoup API 非常漂亮。让我们举一个更具体的例子。假设您有一个如下所示的 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="1">
<name>John Doe</name>
<age>30</age>
<address>
<street>Main street 1</street>
<city>Los Angeles</city>
</address>
</person>
<person id="2">
<name>Jane Doe</name>
<age>40</age>
<address>
<street>Park Avenue 1</street>
<city>New York</city>
</address>
</person>
</persons>
然后你可以像下面这样遍历它:
Document document = Jsoup.parse(new File("/persons.xml"), "UTF-8");
Element person2 = document.select("person[id=2]").first();
System.out.println(person2.select("name").text());
Elements streets = document.select("street");
for (Element street : streets) {
System.out.println(street.text());
}
哪个输出
简·多伊 主要街道 1 公园大道 1 号
更新 2:自 2012 年 3 月发布的 Jsoup 1.6.2 起,Jsoup API 正式支持 XML 解析。