Как сохранить xpath в переменной и использовать его с XSLT 1.0 - PullRequest
0 голосов
/ 08 апреля 2011

Я пытаюсь использовать переменную с xpath для каждого.Но это дает мне ошибку, которую Expression должен оценивать как набор узлов.

NodeName определяется как

<xsl:variable name="NodeName" select="name(.)"/>

<xsl:variable name="SyncPath" 
              select="concat('/combinedxml/com.csc_PolicySyncRs/',$NodeName)"/>

и здесь для каждого цикла

<xsl:for-each select="$SyncPath/*">

Ответы [ 3 ]

2 голосов
/ 08 апреля 2011

Я приму дикое предположение и предположу, что вы заинтересованы в преобразовании переменной в набор узлов, чтобы использовать ее позже в XPath. Это можно сделать с помощью функции расширения exsl:node-set(). Документация содержит примеры использования.

Цитата:

Этот вариант использования показывает результат используя exsl: node-set () для преобразования фрагмент результирующего дерева для набора узлов.

источник

<doc>
   <one />
   <two />
   <three />
   <four />
</doc>

* 1019 таблица стилей *

<!--  Test exslt:node-set applied to a result tree fragment  -->
<xsl:variable name="tree">
   <a>
      <b>
         <c>
            <d />
         </c>
      </b>
   </a>
</xsl:variable>
<xsl:template match="/">
   <out>
      <xsl:value-of select="count(exslt:node-set(//*))" />
   </out>
</xsl:template>

результат

<out xmlns:exslt="http://exslt.org/common">5</out>
1 голос
/ 09 апреля 2011

Использование :

<xsl:variable name="SyncPath"
    select="/combinedxml/com.csc_PolicySyncRs/*[name()=$NodeName]"/>
0 голосов
/ 08 апреля 2011

XSLT 1.0 (и, действительно, 2.0) не имеет стандартного средства для создания выражения XPath в виде строки и последующей его оценки. Многие процессоры имеют для этого функцию расширения, по-разному называемую dyn :valu, saxon :valu и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...