Какие наборы инструментов поддерживают передачу набора узлов в XSLT-преобразование в качестве параметра? - PullRequest
1 голос
/ 12 октября 2009

Это продолжение ответа на предыдущий вопрос , который у меня был о XSLT.

Напомним, я не осознавал, что без EXSLT XSLT не позволил бы вам динамически создавать выражение xpath со строковыми значениями. Один из предложенных обходных путей был

для запроса DOM входного документа перед выполнением преобразования и передачи набора узлов в преобразование

Я использовал Apache Ant, чтобы выполнить преобразование, и согласно руководству для параметров задачи xslt / style

Текстовое значение для помещения в параметр. Первоначально был задуман как выражение XSL.

похоже, что Apache Ant не поддерживает это. Мне стало интересно, как эта семантика этой работы будет работать в системе, которая поддерживает это?

Итак, какие инструментальные цепочки или системы поддерживают передачу набора узлов из исходного документа в преобразование в качестве параметра. Бонусные баллы, например, код.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2011

Я не совсем уверен в своем ответе, потому что кажется, что я не могу правильно понять ваш вопрос, но, основываясь на теме, на которую вы ссылаетесь, и ваших цитатах, я могу предложить следующее предложение:

build.xml:

<?xml version="1.0" encoding="UTF-8"?>

<project name="Test XSLT" default="test-xslt" basedir=".">
    <target name="test-xslt">
        <xslt in="test.xml" style="ant-with-param.xsl" out="ant-with-param-out.xml">
            <param name="param-set-id" expression="2"/>
        </xslt>
    </target>
</project>

test.xml:

<?xml version="1.0" encoding="UTF-8"?>

<params>
    <set id="1">
        <param name="name" value="Name from the first set"/>
    </set>
    <set id="2">
        <param name="name" value="Name from the second set"/>
    </set>
</params>

муравей-с param.xsl:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:exsl="http://exslt.org/common"
                extension-element-prefixes="exsl">
    <xsl:param name="param-set-id"/>
    <xsl:variable name="param-set" select="//params/set[@id = $param-set-id]"/>

    <xsl:template match="/">
        <name>
            <xsl:value-of select="exsl:node-set($param-set)//param[@name = 'name']/@value"/>
        </name>
    </xsl:template>
</xsl:stylesheet>

выход

<?xml version="1.0" encoding="UTF-8"?>
<name>Name from the second set</name>

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

0 голосов
/ 19 февраля 2011

Нельзя передать набор узлов в качестве параметра в стандартном xslt 1.0. Для этого вы должны использовать синтаксический анализатор xslt 2.0.

Например: http://wiki.apache.org/ant/UsingAntWithXSLT20AndSaxon

...