如何在Java中执行类型安全的Xpath查询?
我目前正在使用JDOM进行一些简单的XML解析,但似乎没有什么是类型安全的——我在使用内置Java DOM解析器时遇到了类似的问题,只是需要处理更多的API 例如,如何在Java中执行类型安全的Xpath查询?,java,xml,xpath,type-safety,jdom,Java,Xml,Xpath,Type Safety,Jdom,我目前正在使用JDOM进行一些简单的XML解析,但似乎没有什么是类型安全的——我在使用内置Java DOM解析器时遇到了类似的问题,只是需要处理更多的API 例如,XPath.selectNodes将一个对象作为其参数,并返回一个原始列表,感觉有点像Java 1.1 是否有针对Java的通用化XML和XPath库,或者是否有某种原因导致无法以类型安全的方式执行XPath查询?如果您熟悉HTML上的CSS选择器,最好知道它也支持XML 更新:好的,这是一个很有争议的答案。然而,当您只想选择节点值
XPath.selectNodes
将一个对象
作为其参数,并返回一个原始列表,感觉有点像Java 1.1
是否有针对Java的通用化XML和XPath库,或者是否有某种原因导致无法以类型安全的方式执行XPath查询?如果您熟悉HTML上的CSS选择器,最好知道它也支持XML
更新:好的,这是一个很有争议的答案。然而,当您只想选择节点值时,它可能会比Xpath更简单、更不冗长。JSoupAPI非常灵活。让我们举一个更具体的例子。假设您有一个如下所示的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>
哪个输出
Jane Doe
Main street 1
Park Avenue 1
无名氏
大街1号
公园大道1号
更新2:自2012年3月发布Jsoup 1.6.2以来,Jsoup API正式支持XML解析。AFAIK java中的所有XML查询都是非类型安全的,并且大多数与java 1.3兼容。也就是说,我最喜欢的解析器/生成器是样式解析器。如果您使用的是与xmlpp库几乎相同的1.6,我相信java有XmlStreamReader和XmlStreamWriter。我特别喜欢我可以编写一个方法getFoo,它接受一个流读取器并从中提取并返回一个Foo对象。它是DOM和SAX之间的最佳选择。我认为它可能被一些人称为StAX。
我有点糊涂了,所以我现在退出了我想这可能就是我想要的-看起来不像JDOM那么严格(没有验证),但我喜欢简单的API。如果有开发人员想在jsoup中添加这一功能,我会奖励他们为jsoup添加xpath查询支持,这很有趣,但关键是我不想写一个完整的解析器——我只想用最少的语法从XML文件中获取信息。 Jane Doe Main street 1 Park Avenue 1