Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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_Xpath - Fatal编程技术网

Java 是否有一个XPath表达式可以从两个不同的位置获取值?

Java 是否有一个XPath表达式可以从两个不同的位置获取值?,java,xpath,Java,Xpath,我正在使用javax XPath从一些xml中提取一个值,这些值可以从服务中以两种格式之一返回(不要问我为什么),如下所示: <item> <attrQualOptMany name="someName"> <value>someValueICareAbout</value> <value qual="101">someValueICareAbout</value> </

我正在使用javax XPath从一些xml中提取一个值,这些值可以从服务中以两种格式之一返回(不要问我为什么),如下所示:

<item>
    <attrQualOptMany name="someName">
        <value>someValueICareAbout</value>
        <value qual="101">someValueICareAbout</value>
    </attrQualOptMany>
</item>

<item></item>

只需在xpath中使用OR语句并选择第一个结果

//attrQualOptMany[@name='someName']/value/text()|//attr[@name='someName']/text()
我使用示例输入测试了上述语句

<items>
    <item>
        <attrQualOptMany name="someName">
            <value>someValueICareAbout</value>
            <value qual="101">someValueICareAbout</value>
        </attrQualOptMany>
    </item>
<item>
    <attr name="someName">someValueICareAbout</attr>
</item>
</items>

它工作正常(返回3个结果)。确保只返回第一个结果(并停止检查文档的其余部分)。返回所有匹配的元素(然后选择第一个)将是浪费

String eval = "attrQualOptMany[@name='someName']/value/text() | attr[@name='someName']/text()" 
String value = xpath.compile(eval).evaluate(itemElement, XPathConstants.STRING);
//attrQualOptMany[@name='someName']/value/text()|//attr[@name='someName']/text()
<items>
    <item>
        <attrQualOptMany name="someName">
            <value>someValueICareAbout</value>
            <value qual="101">someValueICareAbout</value>
        </attrQualOptMany>
    </item>
<item>
    <attr name="someName">someValueICareAbout</attr>
</item>
</items>
String eval = "attrQualOptMany[@name='someName']/value/text() | attr[@name='someName']/text()" 
String value = xpath.compile(eval).evaluate(itemElement, XPathConstants.STRING);