如何在Java中进行类型安全的Xpath查询?

dec*_*rig 5 java xml xpath jdom type-safety

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

例如,XPath.selectNodes将一个Objectas作为参数并返回一个原始列表,它只是感觉有点Java 1.1

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

Bal*_*usC 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>
Run Code Online (Sandbox Code Playgroud)

然后你可以像下面这样遍历它:

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());
}
Run Code Online (Sandbox Code Playgroud)

哪个输出

简·无名氏
主要街道1
公园大道 1 号

更新2:从2012年3月发布的Jsoup 1.6.2开始,Jsoup API正式支持XML解析。