Преобразование строки как нодлиста в xsl - PullRequest
2 голосов
/ 18 октября 2010

В настоящее время у меня есть строка (XSLT 1.0), которую я хотел бы превратить в NodeList, чтобы ее можно было использовать в следующем примере.

($ testString представляет элемент в дереве XML)

<xsl:apply-templates select="$testString">

<xsl:template match="$testString">

Я пытался использовать следующее, но ни один из них не работает

<xsl:apply-templates select="xx:node-set($testString)">
<xsl:apply-templates select="exslt:node-set($testString)">

Есть ли возможность конвертировать строку в другую переменную, имеющую свойства NodeList?Или все-таки есть что-то подобное?

Обновление: в настоящее время у меня есть JSP, который вызывает XSL с использованием XML.Страница JSP принимает строку, которая передается на страницу XSL.Строка представляет элемент в XML.Я пытаюсь найти в каждом узле этот элемент и вернуть его значение.

Ответы [ 3 ]

1 голос
/ 18 октября 2010

Есть ли у вас объявление пространства имен exslt в вашей таблице стилей?Следующее работает для меня с любым вводом XML (libxslt / xsltproc)

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:exslt="http://exslt.org/common"
    version="1.0">

    <xsl:template match="/">
        <xsl:variable name="xml-string"><foo bar="baz">etc...</foo></xsl:variable>
        <xsl:variable name="xml-node" select="exslt:node-set($xml-string)"/>
        Bar is <xsl:value-of select="$xml-node//@bar"/>
    </xsl:template>

</xsl:stylesheet>
1 голос
/ 18 октября 2010

У меня есть строка (XSLT 1.0) который я хотел бы превратить в NodeList

Строка не является узлом . Единственный способ сделать узел из строки - это попытаться проанализировать его с помощью синтаксического анализатора XML. Это нельзя сделать динамически в XSLT 1.0 или 2.0 преобразовании.

Если строка статически определена и представляет собой правильно сформированный фрагмент XML, то ее можно указать как тело инструкции <xsl:variable> или <xsl:param> и преобразовать в обычный набор узлов с помощью xxx:node-set() функция расширения, предоставляемая конкретным поставщиком, как показано более подробно в ответе @ Alejandro.

Если вы предоставите более подробную информацию о задаче, которую хотите решить (документ XML, требуемый результат, как результат связан с исходным документом XML), то многие люди смогут помочь.

0 голосов
/ 18 октября 2010

Для XSLT 1.0 и XSLT 2.0 шаблон в правилах должен соответствовать узлам. В XSLT 1.0 не должно быть ссылки на переменную / параметр.

node-set функция расширения преобразует фрагмент дерева результатов в узел: корень узла RTF.

Итак, чтобы сделать то, что вы хотите, вы должны использовать:

<xsl:variable name="vStringRTF">
   <!-- Your string --> 
</xsl:variable> 

<xsl:apply-templates select="exslt:node-set($vStringRTF)/node()"/> 

<xsl:template match="text()"/> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...