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

时间:2010-10-02 21:38:48

标签: java xml xpath type-safety jdom

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

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

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

2 个答案:

答案 0 :(得分:1)

如果您熟悉HTML上的CSS选择器,那么知道Jsoup也支持XML可能会很好。


更新:好的,这给了downvote显然是一个非常有争议的答案。但是,当你想要的只是选择节点值时,它可能比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());
}

输出

Jane Doe
Main street 1
Park Avenue 1

更新2 :自2012年3月发布Jsoup 1.6.2以来,Jsoup API正式支持XML解析。

答案 1 :(得分:1)

AFAIK java中的所有xml查询都是非类型安全的,大多数都是java 1.3兼容的。那说我最喜欢的解析器/生成器是xml pull parser (xmlpp)样式解析器。我相信java有XmlStreamReader和XmlStreamWriter,如果你使用1.6,它几乎与xmlpp库相同。我特别喜欢我可以写一个方法getFoo,它接受一个流读取器并从中拉出并返回一个Foo对象。这是DOM和SAX之间的最佳选择。我认为有些人可能会称之为StAX 我有点絮絮叨叨,所以我现在放弃了