我怎样才能做到在Java类型安全的Xpath查询?
-
27-09-2019 - |
题
我目前使用JDOM做一些简单的XML解析,而且好像没有什么是类型安全的 - 我有一个类似的问题与使用内置的Java DOM解析器,只是有很多更多的API涉水通过。 p>
例如,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,所以我现在退出
不隶属于 StackOverflow