【发布时间】:2017-03-17 20:55:14
【问题描述】:
我正在使用 javax XPath 从一些 xml 中提取一个值,该值可以从服务中以两种格式之一返回(不要问我为什么),如下所示:
<item>
<attrQualOptMany name="someName">
<value>someValueICareAbout</value>
<value qual="101">someValueICareAbout</value>
</attrQualOptMany>
</item>
或
<item>
<attr name="someName">someValueICareAbout</attr>
</item>
是否有单个可以采摘的XPath表达式
someValueICareAbout
来自
<item></item>
元素在任何一种情况下?因为我不知道会提前返回哪种 xml 格式,所以我总是必须通过针对 item 元素评估两个 XPath 表达式来解析值,如下所示。实际上,该项目的多个属性可以以任何一种形式存在,如果可能的话,我不希望在我的代码中使用大量 if-else 块来提取它们:
XPath xpath = XPathFactory.newInstance().newXPath();
Element itemElement; //This element has already been populated by prior code
String value = xpath.compile("attrQualOptMany[@name='someName']/value/text()")
.evaluate(itemElement, XPathConstants.STRING);
if(value == null || value .isEmpty()) {
value = xpath.compile("attr[@name='someName']/text()")
.evaluate(itemElement, XPathConstants.STRING);
}
【问题讨论】: