5

我目前正在使用 JDOM 进行一些简单的 XML 解析,似乎没有什么是类型安全的 - 我在使用内置 Java DOM 解析器时遇到了类似的问题,只是需要处理更多的 API。

例如,XPath.selectNodes以anObject为参数,返回一个原始列表,感觉有点Java 1.1

是否有用于 Java 的通用化 XML 和 XPath 库,或者是否有某些原因无法以类型安全的方式进行 XPath 查询?

4

2 回答 2

1

AFAIK java 中的所有 xml 查询都是非类型安全的,并且大多数都与 java 1.3 兼容。也就是说,我最喜欢的解析器/生成器是xml 拉解析器 (xmlpp)样式解析器。如果您使用的是 1.6,我相信 java 具有 XmlStreamReader 和 XmlStreamWriter,它们与 xmlpp 库几乎相同。我特别喜欢我可以编写一个 getFoo 方法,它接受一个流读取器并从中提取并返回一个 Foo 对象。它是 DOM 和 SAX 之间最好的。我认为它可能被某些人称为 StAX。
我有点闲,所以我现在要辞职

于 2010-10-03T00:54:46.793 回答
1

如果您熟悉 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 解析。

于 2010-10-02T22:30:54.397 回答