我目前使用JDOM做一些简单的XML解析,而且好像没有什么是类型安全的 - 我有一个类似的问题与使用内置的Java DOM解析器,只是有很多更多的API涉水通过

例如,XPath.selectNodes需要一个Object作为参数并返回原始列表,它只是感觉有点爪哇1.1

是否有仿制美化版XML和Java的XPath库,或者是有一些原因,它只是不可能做XPath查询的类型安全的方式?

有帮助吗?

解决方案

如果你熟悉的HTML CSS选择器,它可能是很好的了解, Jsoup 支持XML为好。


更新:OK,这是考虑到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 :自Jsoup 1.6.2被发布2012年3月,XML解析正式被Jsoup API支持的

其他提示

AFAIK所有Java中的XML查询的是非类型安全和最是Java 1.3兼容。这就是说我最喜欢的解析器/发电机是 XML拉式解析器(xmlpp)风格解析器。我相信,如果你使用1.6这几乎是一样的xmlpp库Java有XMLStreamReader的和XmlStreamWriter。我特别喜欢,我可以写一个方法调用getFoo这需要从它流读取器和拉动并返回一个Foo对象。它的排序DOM和SAX之间的最佳。我想这可能是StAX的一些被称为。结果 我开始有点絮絮叨叨-Y,所以我现在退出

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top