我在XSLT中编写了一些产品导出,并且我有一些相当大的select语句,因为我有这些嵌套的排序/标题
给出一个select语句,例如......
{{1}}
是否可以将语句的各个部分分解为可在运行时评估的可重用字符串?
听起来好像我想要属性值模板,但我能找到的那些表明它们不能用于选择语句
要从上面提取最简单且可能不太有用的示例,假设我希望能够在select语句中包含{{1}}而不必每次都复制文本,有没有办法做到这一点?
注意:我无法在此处存储该部分的结果,因为这是for-each指令中的select。
答案 0 :(得分:2)
好吧,正如你提到的属性值模板,我想你正在讨论select
属性,那么你可能想要在XSLT 3(自今年6月以来的W3C推荐)中学到这一点,并且{{3对于Java,.NET和C ++ / C以及Saxon 9.8 XMLSpy / Raptor 2017或2018,您可以使用所谓的Altova(即_select
而不是select
) shadow attributes
<xsl:variable name="exp1" as="xs:string" static="yes" select=""not(product_type='configurable')""/>
然后你可以使用例如。
<xsl:for-each _select="/objects/object/items/item[{$exp1}]">
您也可以使用XSLT 2和3定义您自己的功能,例如
<xsl:function name="mf:exp1" as="xs:boolean">
<xsl:param name="item"/>
<xsl:sequence select="not($item/product_type='configurable')"/>
</xsl:function>
然后使用
<xsl:for-each select="/objects/object/items/item[mf:exp1(.)]">
(当然需要将前缀mf
或您要使用的任何前缀绑定到函数的命名空间,例如xmlns:mf="http://example.com/mf"
。)