XSLT将样式从3.0转换为2.0-可变参考错误

时间:2018-10-10 12:02:39

标签: xslt xslt-2.0 xslt-3.0

我有一个很大的XSL 3.0样式表,我需要将其转换为XSL 2.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: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">...

或:

<xsl:number count="$apppath" format="a" level="any"/>

所有变量都引发相同的错误:XTSE0340 XSLT Pattern syntax error at char 0 on line 635 in {$glosspath}: A variable reference is not allowed in an XSLT pattern (except in a predicate)

我已经在thisguidelines等网站上查看了各种答案,但是我不确定如何将其重写以使其合规...

非常感谢。

1 个答案:

答案 0 :(得分:2)

我相信您可以通过模板匹配来完成此操作...

<xsl:template match="*[. intersect $glosspath]">

对于数字,您可以执行此操作(尽管不一定有效)

<xsl:number count="*[. intersect $apppath]" format="a" level="any"/>

编辑:更改为使用intersect。感谢Martin Honnen