2012-02-24 34 views
1

我在Windows下使用Xalan 1.10的C++版本,我試圖從xml文檔中生成Apache FOP文件。在XSLT轉換輸出中缺少的部分

的文件是相當大的,複雜的,但下面的示例說明這個問題就好了:

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可執行文件產生相同的不完整輸出,所以很有可能不是我的代碼弄亂了某些東西(或是否?)。

這是怎麼回事嗎?任何想法要檢查什麼?

回答

2

您的輸出方法設置爲文本。我懷疑Xalan只輸出實際的文本,而不是XML節點;我記不起那是正確的行爲,所以我不確定是否Xalan或.NET的行爲不正確(可能既不是該規範的靈活性),但是,如果將輸出方法更改爲XML,它應該可以工作。

+0

謝謝,當我將輸出指令更改爲'xml'時,我確實按預期工作。出於某種奇怪的原因,我正在使用的實際文件仍然會產生不完整的輸出,但我會繼續前進,並假設它必定是現在會產生問題的其他內容。我希望行爲上的差異不是由於我的示例樣式表實際上不會從輸入文檔輸出任何數據的結果。 – user1156361 2012-02-24 11:13:07

+0

找到它。我的樣式表包含其他樣式,在這些樣式表中,我將輸出指令設置爲「文本」,有效地覆蓋了主指令。謝謝你的幫助! – user1156361 2012-02-24 11:30:41