2011-01-25 77 views
2

使用xsl.I轉換xml從Oracle數據庫獲取xml。當我轉換時,我無法以實際存儲的格式查看數據。在特定的節點中,使用了在xml中看到的換行符,但是當我轉換時,我無法看到換行符。特定節點中的所有內容都顯示在一行中。在xml中使用xsl轉換xml時使用的保留行提要

有人可以幫助我如何在xml中包含已經存在的換行嗎???

感謝 拉哈夫

+0

這裏有兩種可能性:XSLT處理器不保留空白(可能是如果您使用的是MSXML),或者它是,但無論您用什麼來顯示,都不會顯示換行符。如果您的輸出顯示爲html文檔的一部分,則會發生這種情況。 – Flynn1179 2011-01-25 10:13:51

+0

好問題,+1。查看我的答案以進行有助於確定觀察到的問題的原因的測試。 :) – 2011-01-25 14:43:36

回答

0

XML和derivitives壓縮空格,因此給語法分析器,它們都不重要。 但是有些解析器可以選擇保留空白區域。 在MSXML中,您將DomDocument的preserveWhiteSpace屬性設置爲true。

+1

不正確,默認情況下XML保留空白(至少它應該是.MSXML不)。 – Flynn1179 2011-01-25 10:11:02

1

如上所示,如果您使用的是MSXML,那麼請檢查它是否配置爲保留空白。

另請檢查樣式表是否使用<xsl:strip-space>。另外,如果您使用的是XSLT 2.0,則默認情況下,在DTD或模式中定義的元素的空白被剝離爲僅包含元素的內容。

另外,當然你的樣式表代碼可以用空白文本節點做一些事情,而不是將它們複製到輸出中。

0

嘗試使用這種轉變

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes"/> 
<xsl:preserve-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

萬一換行仍然沒有顯示出來,這意味着XML解析器剝離,關閉所有隻有空白文本節點。閱讀文檔如何調用解析器,以便阻止此默認操作 - 就像Deanna對MSXML的回答中所建議的那樣。

如果上述轉換的結果確實包含換行符,那麼您在代碼中執行了一些操作,這些代碼不會顯示給我們,導致這些換行符無法顯示。