XSLT converting style down from 3.0 to 2.0 - variable reference error

怎甘沉沦 提交于 2019-12-24 12:29:42

问题


I have a large XSL 3.0 stylesheet which I need to convert to XSL 2.0. It seems there is one error repeated throughout the document, but I'm not sure how to fix it.

For example, in XSL 3.0 I declare these variables:

<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']"/> 

And then I use these variables in a variety of contexts such as

<xsl:template match="$glosspath">...

or:

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

The variables all throw the same error: 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)

I've looked at various answers on the site like this and at the guidelines, but I'm not sure how to re-write this to be compliant...

Many thanks in advance.


回答1:


I believe for your template match you can do this...

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

And for the number, you can do this (although this is not necessarily as efficient)

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

EDIT: Changed to use intersect. Thanks to Martin Honnen



来源:https://stackoverflow.com/questions/52739824/xslt-converting-style-down-from-3-0-to-2-0-variable-reference-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!