Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中执行类型安全的Xpath查询?_Java_Xml_Xpath_Type Safety_Jdom - Fatal编程技术网

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

如何在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 更新:好的,这是一个很有争议的答案。然而,当您只想选择节点值

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

例如,
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