我目前正在使用JDOM进行一些简单的XML解析,看起来没有什么是类型安全的 - 我在使用内置的Java DOM解析器时遇到了类似的问题,只需要更多的API来解决。
例如,XPath.selectNodes
以Object
作为参数并返回一个原始列表,只是感觉有点Java 1.1
是否存在用于Java的通用化XML和XPath库,或者是否有某种原因导致无法以类型安全的方式执行XPath查询?
答案 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 我有点絮絮叨叨,所以我现在放弃了