使用xpath查找包含属性和子元素的复杂元素

时间:2013-07-15 10:57:10

标签: xpath

鉴于此XML

<well bulkShift="0.000000" diameter="5.000000" hidden="false" name="67-1-TpX-10" filename="67-1-TpX-10.well">
    <metadata/>
    <unit>ftUS</unit>
    <colour blue="1.000000" green="1.000000" hue="" red="1.000000"/>
    <tvd clip="false"/>
    <associatedcheckshot>25-1-X-14</associatedcheckshot>
    <associatedwelllog>HDRA_67-1-TpX-10</associatedwelllog>
    <associatedwelllog>NPHI_67-1-TpX-10</associatedwelllog>
</well>

我可以选择带有此XPath的元素

//well[@bulkShift=0 and @diameter=5 and @hidden='false' and @name='67-1-TpX-10' and @filename='67-1-TpX-10.well']

但是我需要更加具体,因为我需要找到具有这些特定子节点的元素,因为子元素(元数据,单位,颜色等)可以在元素内以任何顺序出现。

理想情况下,我希望能够仅使用一个XPath查询来选择此节点。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

此模板还匹配子项并归因于子项

<xsl:template match="well[@hidden='false'][./unit='ftUS' or ./tvd/@clip='false']">
    well found!
</xsl:template>

或一气呵成:

<xsl:template match="well[@hidden='false' and (./unit='ftUS' or ./tvd/@clip='false')]">
    well found!
</xsl:template>

答案 1 :(得分:1)

您可以将子项测试添加到谓词的属性测试中 e.g:

//well[@bulkShift=0 and @diameter=5 and @hidden='false' and @name='67-1-TpX-10' and @filename='67-1-TpX-10.well']
     [metadata and unit and colour]

关闭谓词[ predicate1 ][ predicate2 ]的列表与使用和操作的列表相同。