Стиль преобразования XSLT уменьшен с 3.0 до 2.0 - ошибка ссылки на переменную - PullRequest
0 голосов
/ 10 октября 2018

У меня есть большая таблица стилей 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)

I 'Мы рассматривали различные ответы на сайте, такие как this и Guidelines , но я не уверен, как переписать это, чтобы соответствовать ...

Большое спасибо заранее.

1 Ответ

0 голосов
/ 10 октября 2018

Я полагаю, что для вашего соответствия шаблону вы можете сделать это ...

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

И для числа, вы можете сделать это (хотя это не обязательно так эффективно)

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

РЕДАКТИРОВАТЬ: Изменено для использования intersect.Спасибо Мартину Хоннену

...