基于属性和值的 xpath
本文关键字:xpath 属性 于属性 | 更新日期: 2023-09-27 17:58:49
我需要处理相同的xml,下面是部分内容:
<response>
<dat id="1">
<b>
<i>1</i>
</b>
<ds>
<d>
<t>2012-12-21</t>
我需要使用什么 xpath 来选择元素"d",该元素具有属性 id="1"的父-父元素"dat",并且具有值为 2012-12-21 的子元素"t"?
在 C# 中,应用程序从 Internet 中获取此 xml 并将其加载到 XmlDocument 中。目前我正在执行多个步骤:找到注释"dat",然后在"dat"下找到"t",然后转到父节点"d"。我希望有 xpath 来替换上述多个步骤。
我已经尝试过这个 xpath://dat[@id="1"]/ds/d[t="2012-12-21"]
,但返回空节点
谢谢。
编辑:请参阅下面的Dimitre Novatchev的解决方案。
顺便说一句://dat[@id="1"]/ds/d[t="2012-12-21"]
也工作过,不知道我做测试时发生了什么。
使用:
//dat[@id = 1]/*/d[t[. = '2012-12-21']]
这将选择具有t
子元素的所有d
元素,其字符串值为字符串'2012-12-21'
,
并且其祖父级是具有数值为 1
的 id
属性的dat
。
如果您只想选择所有此类元素中的一个(例如第一个(,请使用:
(//dat[@id = 1]/*/d[t[. = '2012-12-21']])[1]
基于 XSLT 的验证:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select="//dat[@id = 1]/*/d[t[. = '2012-12-21']]"/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于(已完成的(提供的 XML 文档时:
<response>
<dat id="1">
<b>
<i>1</i>
</b>
<ds>
<d>
<t>2012-12-21</t>
</d>
</ds>
</dat>
</response>
计算上述 XPath 表达式,并将此评估的结果(所选节点(复制到输出中:
<d>
<t>2012-12-21</t>
</d>