Как использовать переменные в выражениях xslt xpath - PullRequest
0 голосов
/ 25 марта 2012

У меня есть что-то вроде следующего кода: *

<xsl:variable name="sample">
     <xsl:copy-of select="//foo">
     <xsl:copy-of select="//bar">
</xsl>

И в шаблоне, который я хотел бы использовать:

<xsl:for-each select="$sample/*">
    <!-- do something -->
</xsl:for-each>

Однако $sample/*, похоже, небыть действительным выражением xpath или возвращать набор узлов, и я не могу понять, как это исправить.Я также попробовал просто $sample, но это также не набор узлов: / Есть идеи, что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 26 марта 2012

Используете ли вы XSLT 1?Вы не можете применить выражения xpath к переменным в XSLT 1. Однако вы можете в XSLT 2.

В зависимости от вашего процессора XSLT у вас может быть доступ к пользовательскому расширению, такому как функция набора узлов EXSLT.

0 голосов
/ 26 марта 2012

На самом деле, есть два других решения, доступных после перехода на процессор XSLT 2.0.
Одно применяет зависимую от процессора функцию, как говорит Кеван, например, msxsl:node-set() или xalan:nodeset() или exsl:node-set().
.другой - использовать тот факт, что атрибут xsl:variable select включает преобразование result tree fragment, такого как ваша примерная переменная, в набор узлов;следовательно, определение новой переменной с атрибутом select, равным тому, который должен быть адресован, сделает свое дело:

<xsl:variable name="temp" select= "$sample"/>
<xsl:for-each select="$temp/*">
    <!-- do something -->
</xsl:for-each>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...