首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在XPath中有条件地选择节点

如何在XPath中有条件地选择节点
EN

Stack Overflow用户
提问于 2014-02-15 01:59:07
回答 2查看 63关注 0票数 1

我正在使用的XSD模式需要一个国际或国内地址:

代码语言:javascript
复制
"/mns:PhysicalAddress/mns:DomesticAddress/mns:City"

代码语言:javascript
复制
"/mns:PhysicalAddress/mns:InternationalAddress/mns:City"

XMLUtils.BuildField(Document doc, String xpath)一样,它被用作Java方法中的参数。

我知道我可以直接转到创建该doc的Java对象,并使用自动生成的bean来查询元素,但我更喜欢停留在简明的XPath领域。这个是可能的吗?

如果是这样,我该如何编写一个选择mns:City的XPath表达式,而不管它是国际地址还是国内地址?

注意:这是在Java中实现的,而不是Javascript、HTML或XSLT语言,所以我不认为<xsl:if>在这里是相关的。

EN

回答 2

Stack Overflow用户

发布于 2014-02-15 02:41:59

你可以去寻找所有有父母之一的城市:

代码语言:javascript
复制
//mns:City[(parent::mns:DomesticAddress|parent::mns:InternationalAddress)]

如果您还需要确保地址位于物理地址中:

代码语言:javascript
复制
//mns:City[(parent::mns:DomesticAddress|parent::mns:InternationalAddress)[parent::mns:PhysicalAddress]]

或者,不是颠倒层次结构,而是执行*并检查名称:

代码语言:javascript
复制
/mns:PhysicalAddress/*[name()="mns:DomesticAddress" or name()="mns:InternationalAddress"]/mns:City
票数 2
EN

Stack Overflow用户

发布于 2014-02-15 03:11:14

根据XML的精确结构,

代码语言:javascript
复制
/mns:PhysicalAddress/*/mns:City

可能已经足够了,如果这太吸引人了,那么最明确的选择可能就是使用您已经拥有的两个替代方案,由|分隔

代码语言:javascript
复制
/mns:PhysicalAddress/mns:DomesticAddress/mns:City | /mns:PhysicalAddress/mns:InternationalAddress/mns:City

或者稍微简洁一点,但(在我看来)不太清楚:

代码语言:javascript
复制
/mns:PhysicalAddress/*[self::mns:DomesticAddress | self::mns:InternationalAddress]/mns:City
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21786328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档