2013-04-16 48 views
2

使用xsl:copy-of-my轉換來轉換下列xml時,會丟失origianl文檔的格式 - 我不希望它接觸原始文件。 Litrally剛纔複製的節點 - 不變XSLT拷貝不保留空白

源XML

<flow> 
    <flow> 
     <material><mattext fontface="Arial"><p style="white-space: pre-wrap"><font size="11">The moon is the only extraterrestrial body to be visited by humans?</font></p></mattext> 
</material> 
    </flow> 

我得到這樣的結果

<flow><flow><material><mattext fontface="Arial" texttype="text/plain"><p style="white-space: pre-wrap"><font size="11">The moon is the only extraterrestrial body to be visited by humans?</font></p></mattext></material></flow> 

正如你可以看到它把它所有在同一行 - 我的目的,我需要保留空白(漂亮的打印不是選項)

我的XSL看起來像這樣

<xsl:for-each-group select="qti:item" group-adjacent="(position()-1)"> 

<!-- Output the file--> 
<xsl:result-document href="{$filename}"> 
<questtag> 
<!-- Output the contents--> 
<xsl:copy-of select="current-group()"/> 
</questtag> 
</xsl:result-document> 
</xsl:for-each-group> 

更新:確定 - 我發現,如果我刪除源文件DTD然後空格被保留 - 但這心不是2.0的狀態,當所述源是從DTD-或構建的溶液的一個選項

+0

Rob,考慮提供最小但完整的樣本,以便我們重現問題,以及有關哪個XSLT 2.0處理器和您使用的XML解析器的信息。恐怕發佈的源代碼XML根本不會顯示任何'for-each-group'進程的'qti:item'。 –

+0

...你如何應用XSLT?如果您首先將XML加載到DOM對象中 - 或者通過DOM對象來保存結果 - 這可能會導致丟失空格,而不管XSLT在做什麼 – MiMo

+0

我使用SAXON 9.4來轉換 – Rob

回答

3

XSLT經過架構驗證的文檔,僅在元素內容中的空白在到達XSLT處理器之前被忽略/剝離。所以在XSLT看到它的時候沒有空白。如果您希望空白有意義,則需要將內容模型聲明爲混合內容。

+0

我認爲這正是發生了!但是,在我的SAXON命令行中添加-strip:none(即使沒有默認設置)可以解決此問題 – Rob