Детали, отсутствующие в выходных данных XSLT-преобразования - PullRequest
1 голос
/ 24 февраля 2012

Я использую C ++ версию Xalan 1.10 под Windows и пытаюсь создать файл Apache FOP из XML-документа.

Файлы довольно большие и сложные, но следующие примеры прекрасно иллюстрируют проблему:

Input.xml

<?xml version="1.0" encoding="utf-8"?>
  <root-xml-element>
    <MyElement name="Some text"/>
  </root-xml-element>

Stylesheet.xsl

<xsl:transform version="1.0"
           xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
           xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <xsl:output method="text" indent="no"/>

  <xsl:template match="/">
    <fo:root>
      <xsl:text>(ROOT MATCHED)</xsl:text>
      <xsl:apply-templates select="root-xml-element"/>  
    </fo:root>
  </xsl:template>

  <xsl:template match="root-xml-element">
    <xsl:text>(ROOT ELEMENT MATCHED)</xsl:text>
    <xsl:call-template name="MyTemplate"/>
  </xsl:template>

  <xsl:template name="MyTemplate">
    <xsl:text>(MY TEMPLATE MATCHED)</xsl:text>
      <fo:layout-master-set>
        <fo:simple-page-master master-name="Master" page-width="29.7cm" page-height="21cm">
        </fo:simple-page-master>
      </fo:layout-master-set>
  </xsl:template>
</xsl:transform>

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

Выходной файл из Xalan

(ROOT MATCHED)(ROOT ELEMENT MATCHED)(MY TEMPLATE MATCHED)

Как видите, в выходном файле нет тегов <fo:...>.Шаблон, очевидно, применяется.

Когда я запускаю процессор .NET xslt для тех же файлов, я получаю ожидаемый вывод:

Выходной файл из .NET XSLTпроцессор

<?xml version="1.0" encoding="utf-8"?>
  <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
   (ROOT MATCHED)(ROOT ELEMENT MATCHED)(MY TEMPLATE MATCHED)
    <fo:layout-master-set>
      <fo:simple-page-master master-name="Master" page-width="29.7cm" page-height="21cm" />
    </fo:layout-master-set>
  </fo:root>

То же преобразование также работает при применении из версии Java Xalan (точно не знаю, какая именно).С другой стороны, исполняемый файл командной строки Xalan выдает тот же неполный вывод, так что, скорее всего, не мой код что-то напутает (или это так?).

Что здесь происходит?Есть идеи что проверить?

1 Ответ

2 голосов
/ 24 февраля 2012

Ваш метод вывода установлен на текст. Я подозреваю, что Xalan выводит только фактический текст, а не узлы XML; Я не могу вспомнить, какое поведение является правильным, поэтому я не уверен, что Xalan или .NET ведут себя некорректно (возможно, даже если спецификация не гибкая), однако, он должен работать, если вы измените свой метод вывода на XML .

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