在我的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
答案 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]"/>
...但我更喜欢自己使用=
。