在 XSLT 中,如何使用存在多个相同节点的 ID 从节点中选择一个值?
Posted
技术标签:
【中文标题】在 XSLT 中,如何使用存在多个相同节点的 ID 从节点中选择一个值?【英文标题】:In XSLT how to select a value from a node using IDs in which there is multiple of the same nodes? 【发布时间】:2020-05-02 12:45:32 【问题描述】:我正在尝试从具有相同名称的多个节点中选择值,但我无法创建成功的变量或 IF 语句。
在下面的示例中,我试图弄清楚如何在 XSLT 中创建一个 IF 语句,说明来自 Houses 节点的 IF HouseID 和 HouseNo 与来自 Streets 节点的 HouseID 和 HouseNo 匹配,然后显示匹配节点的价格。
XML 示例如下:
<pi:Houses>
<pi:HouseID>1111</pi:HouseID>
<pi:HouseNo>012</pi:HouseNo>
<pi:Price>100000</piPrice>
</pi:House>
<pi:Streets>
<pi:HouseID>1111</pi:HouseID>
<pi:HouseNo>012</pi:HouseNo>
<pi:Price>100000</piPrice>
</pi:Streets>
<pi:Houses>
<pi:HouseID>2222</pi:HouseID>
<pi:HouseNo>098</pi:HouseNo>
<pi:Price>9000000</piPrice>
</pi:House>
<pi:Streets>
<pi:HouseID>2222</pi:HouseID>
<pi:HouseNo>098</pi:HouseNo>
<pi:Price>9000000</piPrice>
</pi:Streets>
我目前正在尝试使用
<xsl:if test ="pi:Houses/pi:HouseID = pi:Streets/HouseID">
<xsl:value-of select="pi:Houses/pi:Price"/>
</xsl:if>
但这给了我两个值。 我尝试过使用 position() 运算符,但没有尝试过。
任何建议都会很棒,谢谢!
【问题讨论】:
您能否向我们展示一个最小但格式良好的 XML 示例文档以及输出这两个值的最小但完整的 XSLT?目前尚不清楚您在什么上下文或容器中拥有示例元素,也不清楚您的xsl:if
的上下文。
【参考方案1】:
我过去曾使用变量解决过这个问题。
在这个例子中,我去掉了命名空间以便于阅读
<xsl:for-each select='//Streets'>
<xsl:variable name='id' select='HouseID'/>
<p>
Street HouseID:<xsl:value-of select='$id'/><br/>
House Price: <xsl:value-of select='../Houses[HouseID=$id]/Price'/>
</p>
</xsl:for-each>
【讨论】:
以上是关于在 XSLT 中,如何使用存在多个相同节点的 ID 从节点中选择一个值?的主要内容,如果未能解决你的问题,请参考以下文章
使用 XSLT 组合具有相同 ID 及其值的节点 (XML)
使用 XSLT 基于 ID 从多个 xPath 中选择 XML 节点