问题
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