XSLT将样式从3.0转换为2.0-变量引用错误
我有一个大型XSL3.0样式表,需要将其转换为XSL2.0。在整个文档中似乎重复了一个错误,但我不确定如何修复它 例如,在XSL 3.0中,我声明了以下变量:XSLT将样式从3.0转换为2.0-变量引用错误,xslt,xslt-2.0,xslt-3.0,Xslt,Xslt 2.0,Xslt 3.0,我有一个大型XSL3.0样式表,需要将其转换为XSL2.0。在整个文档中似乎重复了一个错误,但我不确定如何修复它 例如,在XSL 3.0中,我声明了以下变量: <xsl:variable name="glosspath" select="/tei:TEI/tei:text//tei:add"/> <xsl:variable name="apppath" select="/tei:TEI/tei:text//tei:del | /tei:TEI/tei:text//tei
<xsl:variable name="glosspath"
select="/tei:TEI/tei:text//tei:add"/>
<xsl:variable name="apppath"
select="/tei:TEI/tei:text//tei:del | /tei:TEI/tei:text//tei:surplus | /tei:TEI/tei:text//tei:supplied[@reason='added']
| /tei:TEI/tei:text//tei:choice[@style='sic'] | /tei:TEI/tei:text//tei:sic[@style='sic'] | /tei:TEI/tei:text//tei:gap
| /tei:TEI/tei:text//tei:note[@type='reading']"/>
然后我在各种环境中使用这些变量,比如
<xsl:template match="$glosspath">...
。。。
或:
所有变量都抛出相同的错误:{$glosspath}中第635行char 0处的XTSE0340 XSLT模式语法错误:XSLT模式中不允许变量引用(谓词中除外)
我已经在网站上查看了各种答案,如和,但我不确定如何重新编写此内容以符合
非常感谢。我相信对于模板匹配,您可以做到这一点
<xsl:template match="*[. intersect $glosspath]">
对于数字,您可以这样做(尽管这不一定是有效的)
编辑:更改为使用
intersect
。感谢Martin Honnen这将是一件困难的事,除非您能够基本上用完整路径替换变量的任何模式使用,例如
而不是
@MartinHonnen。如果是一次性问题,那么替换它们并不困难。随着时间的推移,如果添加了其他节点,则实际上是关于代码维护——变量在62个位置使用。是否要使用*[.is$glosspath]
?即使只有当变量选择单个节点时,这也会起作用,否则您将需要*[.intersect$glosspath]
@TimC这与@MartinHonnen的调整一起起作用*[.intersect$glosspath]
谢谢@MartinHonnen-我已经相应地修改了我的答案。
<xsl:template match="*[. intersect $glosspath]">
<xsl:number count="*[. intersect $apppath]" format="a" level="any"/>