使用xpath查找具有属性和子元素的复杂元素

使用xpath查找具有属性和子元素的复杂元素,xpath,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"/&

鉴于此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查询来选择这个节点


有人能帮忙吗?

此模板也匹配childs和childs上的属性

<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>

找到了!

此模板还匹配childs和在childs上的属性

<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>

找到了!

您可以在谓词中添加子级测试,如属性测试 e、 g:


拥有一个谓词列表
[predicate1][predicate2]
与使用and操作的列表相同。

您可以向谓词添加子级测试,如属性测试 e、 g:


拥有一个谓词列表
[predicate1][predicate2]
与使用and操作的谓词列表相同。

我目前正在学习
XPATH
。所以我有个问题要问你。为什么
[@hidden='false'][./unit='ftUS'或/tvd/@clip='false'
不能在一个
[..]
中写入?这可能是一个愚蠢的问题,我仍然需要知道如何缩小我的理解差距。好吧。那么这两个
[]
是用于
操作的吗?如果我想在一个
[]
我该怎么写?谢谢朋友..我一直在期待这样的事情,尽管这是我的猜测。你让我的猜测成真了..:)如果你在这里问一个问题会更有趣,所以在你尝试了一些东西并被卡住之后。这样你会学到很多东西。我不是xslt专家,但我会尽我所能回答xslt问题,这样我们就可以再次见面了。这s也给了其他成员一个帮助的机会。我目前正在学习XPATH。所以我有一个问题要问你。为什么
[@hidden='false'][./unit='ftUS'或/tvd/@clip='false'
不能写在一个
[..]
?可能是个愚蠢的问题,但我仍然需要知道,以缩小我的理解差距。好的。那么这两个
[]
是用于
操作的吗?如果我想在单个
[]中编写它的话
我该怎么写?谢谢朋友..我一直在期待这样的事情,尽管这是我的猜测。你让我的猜测成真了..:)如果你在这里问一个问题会更有趣,所以在你尝试了一些东西并被卡住之后。这样你会学到很多东西。我不是xslt专家,但我会尽我所能回答xslt问题,这样我们就可以再次见面了。这s还为其他成员提供了帮助的机会。这并不完全正确。多个谓词会更改
position()
的值。如果您没有使用
position()
,则它们是等效的。这不完全正确。多个谓词会更改
position()
的值。如果您没有使用
position()
,则它们是等效的。