【问题标题】:Parts missing in an XSLT transformation outputXSLT 转换输出中缺少部分
【发布时间】:2012-03-14 17:55:33
【问题描述】:

我在 Windows 下使用 Xalan 1.10 的 C++ 版本,并试图从 xml 文档中生成 Apache FOP 文件。

文件相当大且复杂,但以下示例很好地说明了问题:

Input.xml

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

样式表.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)

如您所见,输出文件中没有&lt;fo:...&gt; 标记。该模板显然已被应用。

当我对这些相同的文件运行 .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 可执行文件会产生相同的不完整输出,因此很可能不是我的代码搞砸了某些东西(或者是这样吗?)。

这里发生了什么?任何想法要检查什么?

【问题讨论】:

    标签: xslt xalan


    【解决方案1】:

    您的输出方法设置为文本。我怀疑 Xalan 只输出实际文本,而不是 XML 节点;我不记得哪个是正确的行为,所以我不确定是 Xalan 还是 .NET 的行为不正确(如果规范灵活,可能两者都没有),但是,如果您将输出方法更改为 XML,它应该可以工作.

    【讨论】:

    • 谢谢,当我将输出指令更改为“xml”时,我确实让示例按预期工作。出于某种奇怪的原因,我正在使用的实际文件仍然会产生不完整的输出,但我会继续假设它必须是现在产生问题的其他东西。我希望行为上的差异不是因为我的示例样式表实际上没有从输入文档中输出任何数据。
    • 找到了。我的样式表包括其他样式表,在这些样式表中,我将输出指令设置为“文本”,有效地覆盖了主指令。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多