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