如何使用XSLT匹配属性属于变量指定值范围的节点?

时间:2013-10-04 22:11:22

标签: xslt xslt-2.0

在我的XSLT中,我有一组名为MyProducts的节点,每个节点都有一个ProductId节点。

我想阅读另一个名为ProductCatalog的节点,其中包含产品ID列表,然后仅选择MyProducts中产品ID为ProductCatalog的产品。

为此,我编写了一个获取有效ID的XSLT变量:

<xsl:variable name="ValidIds" select="ProductCatalog/ProductId" />
<xsl:variable name="MyProductsWithValidId" select="ProductCatalog(... />

我认为应该有一些函数可以完成这个XSLT,它指定我只需要来自ProductCatalog的节点,其中ProductId包含在ValidIds变量中。

我该怎么做?我的XSLT引擎正在运行XSLT-2.0

1 个答案:

答案 0 :(得分:3)

<xsl:variable name="MyProductsWithValidId" select="ProductCatalog[ProductId=$ValidIds]"/>

在XSLT 1和XSLT 2中,您可以与=两侧的多个值进行比较。处理器检查每一方的每一方,并且只要任何比较true(),就返回结果true()。只有在进行了所有可能的比较后才会返回false()

所以你会知道,没有一个比较是真的,或者至少有一个比较是真的,但你不会知道哪一个比较。

XSLT 2中的一种正式方式是:

<xsl:variable name="MyProductsWithValidId" 
              select="ProductCatalog[some $v in $ValidIds satisfies ProductId=$v]"/>

...但我更喜欢自己使用=