XSLT : трубный документ

Установка: Apache Xalan 2.7.1

Ввод:

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>

main.xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xpi="http://xml.apache.org/xalan/PipeDocument">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>


  <xsl:template match="/">  
        <xpi:pipeDocument source="." >
               <stylesheet href="second.xslt"/>
        </xpi:pipeDocument>
  </xsl:template>

</xsl:stylesheet>

second.xslt :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="/">    
        <xsl:value-of select="note/to" />
    </xsl:template>

</xsl:stylesheet>

Вывод:

<?xml version="1.0" encoding="UTF-8"?><xpi:pipeDocument xmlns:xpi="http://xml.apache.org/xalan/PipeDocument" source=".">
<stylesheet href="second.xslt"/>
</xpi:pipeDocument>

Желаемый результат:

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

Вопрос:

Отсюда: https://xml.apache.org/xalan-j/apidocs/org/apache/xalan/lib/PipeDocument.html

Я действительно ломаю голову об этом. Как правильно использовать source и target??

Я хочу в настоящее время вводить xml как source и output так же, как это было, стандартное output.xml.

Примечание. Приветствуются только решения xslt 1.0


person Piotr Dajlido    schedule 03.07.2015    source источник
comment
См. w3.org/TR/xslt#extension, если вы хотите сообщить обработчику что этот элемент является элементом расширения, который служит инструкцией, вам нужно начать с объявления <xsl:stylesheet extension-element-prefixes="xpi" ...>.   -  person Martin Honnen    schedule 03.07.2015
comment
А <xpi:pipeDocument source="." > должно быть <xpi:pipeDocument source="{.}" >, нет?   -  person Martin Honnen    schedule 03.07.2015
comment
Я не возражаю, prefixes фактическое значение вывода - это проблема. second.xslt не вызывается для конвейерного преобразования.   -  person Piotr Dajlido    schedule 04.07.2015
comment
Итак, чтобы сообщить процессору, что вы хотите, чтобы xpi:pipeDocument обрабатывалось как инструкция, а не как элемент результата, вы должны объявить <xsl:stylesheet extension-element-prefixes="xpi" ...>. Я не понимаю, почему вместо этого вы говорите нам, что не возражаете против префиксов, если только вы не путаете exclude-result-prefixes с extension-element-prefixes. Но это совершенно разные атрибуты.   -  person Martin Honnen    schedule 04.07.2015
comment
хорошо, это было небольшое недоразумение. Вы на 100% правы насчет extension-element-prefixes. Я обновлю q, после некоторого тестирования   -  person Piotr Dajlido    schedule 04.07.2015
comment
@MartinHonnen Пожалуйста, дайте ответ на этот вопрос с рабочим примером, extension-element-prefixes работает как шарм   -  person Piotr Dajlido    schedule 07.07.2015
comment
Если у вас это заработало, подумайте о том, чтобы написать ответ самостоятельно, у меня недостаточно интереса к конкретным вещам Xalan, чтобы попытаться написать ответ с полностью проверенным примером.   -  person Martin Honnen    schedule 07.07.2015
comment
Конечно, я просто хотел дать вам очки за вашу помощь. В любом случае Спасибо за вашу помощь.   -  person Piotr Dajlido    schedule 07.07.2015


Ответы (1)


Считайте следующий шаблон ответом

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

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xpi="http://xml.apache.org/xalan/PipeDocument"
    extension-element-prefixes="xpi">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />


  <xsl:template match="/">      
        <xpi:pipeDocument source="'source_file'" target="output_file">
               <stylesheet href="second.xslt"/>
               <stylesheet href="third.xslt"/>
        </xpi:pipeDocument>
    </xsl:template>


</xsl:stylesheet>
person Piotr Dajlido    schedule 07.07.2015