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

"/mns:PhysicalAddress/mns:DomesticAddress/mns:City"


要么

"/mns:PhysicalAddress/mns:InternationalAddress/mns:City"


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

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

如果是这样,我怎么写XPath表达式选择mns:City而不管它是国际地址还是国内地址?

注意:这是Java语言,而不是Javascript,HTML或XSLT,因此,我认为<xsl:if>与此处无关。

最佳答案

您可以查找所有有父母一方的城市:

//mns:City[(parent::mns:DomesticAddress|parent::mns:InternationalAddress)]


如果还需要确保该地址在物理地址中:

//mns:City[(parent::mns:DomesticAddress|parent::mns:InternationalAddress)[parent::mns:PhysicalAddress]]


另外,也可以执行*并检查名称,而不是反转层次结构:

/mns:PhysicalAddress/*[name()="mns:DomesticAddress" or name()="mns:InternationalAddress"]/mns:City

09-11 16:33