xml - 根据节点的值选择属性

标签 xml xslt xpath

我可能没有正确提出问题,所以请耐心等待。我需要搜索具有给定值的节点,并返回其属性之一。

以下是胡说八道的数据,但它说明了我的观点:

<Period type="Day" value="2016-01-18Z">
 <Rep D="ESE" F="-1" G="20" H="71" Pp="6" S="9" T="2" V="VG" W="7" U="0">0</Rep>
 <Rep D="SE" F="-1" G="18" H="77" Pp="9" S="9" T="3" V="VG" W="8" U="0">180</Rep>
 <Rep D="SE" F="-1" G="20" H="76" Pp="9" S="9" T="3" V="GO" W="8" U="0">360</Rep>
</Period>
<Period type="Day" value="2016-01-19Z">
 <Rep D="E" F="-2" G="9" H="77" Pp="3" S="4" T="0" V="GO" W="2" U="0">540</Rep>
 <Rep D="E" F="-3" G="9" H="80" Pp="5" S="4" T="0" V="GO" W="7" U="0">720</Rep>
 <Rep D="ENE" F="-3" G="9" H="85" Pp="4" S="4" T="-1" V="GO" W="2" U="0">900</Rep>
</Period>


我了解,如果我想选择例如来自第二个Period的第二个Rep值的属性W,我的xsl看起来像这样:

<xsl:value-of select="Period[2]/Rep[2]/@W">


这将返回:7

这是我需要返回的值,但是XML内容根据一天中的时间而变化,因此我需要根据Rep自己的值720(而不是其在树中的位置)进行选择。

我在尝试以下操作时一团糟,很明显,我在吠错树:

<xsl:value-of select="Period[2]/Rep['180']/@W" />
<xsl:value-of select="Period[2]/Rep[Rep='180']/@W" />
<xsl:value-of select="Period[2]/'180'/@W" />

最佳答案

“我需要根据代表自己的720值而不是其在树中的位置来选择它”


基本上,您可以使用.引用当前上下文节点。所以这是一种可能的方式:

<xsl:value-of select="Period[2]/Rep[.=720]/@W" />

关于xml - 根据节点的值选择属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34834753/

相关文章:

xslt - 祖先与祖先或 self 之间的区别

python - 如何抓取这个字段?

xml - 在 XSLT 中对具有条件的记录进行计数

html - 用于匹配具有缺失/未指定属性的元素的 XPath?

c# - 为什么从 C# 和 Java 发送的 http 内容不同?

xml - 引用的文件包含错误 (http ://testng. org/testng-1.0.dtd)

xml - 使用XSLT 1.0获得唯一值(不使用XSL:Key)

c# - Xsl 转换剪切两个 <xsl :value-of select's 之间的空间

xpath - 如何使用 XPath 查询在 SVG 图像内通过其 href 查找图像?

c# - 是否存在用于两个 XmlDocuments 的 .NET XPath 'diff' 命令?