C# 處理XML + XSLT轉換中HTML元素的輸出問題及解決

來源:互聯網
上載者:User
最近同事手裡的一個項目需要用 XSLT + XML 輸出 Microsoft Word 格式的 Doc檔案。考慮到客戶機器上安裝的不一定是支援 WordML 的 Office 2003, 所以XSLT + XML輸出 WordML 的方案被剔除。此外商業的轉換組件價格不菲,似乎也不行。還有就是轉換成 RTF 格式,看上去也不容易。因為要輸出的東西很簡單,只有幾個表格和文字,沒有複雜的東西,最後採用了 XSLT + XML 輸出 HTML 檔案的方法,HTML 改副檔名為 doc,用 Word 開啟,沒有問題,看來這個辦法是可行的。

XML 資料裡麵包含了 <br /> 這個 html 元素, 但是用 C# 進行 XsltTransform 死活就是輸出不了 <br />。奇怪的是IE 直接瀏覽 XML 檔案和 Javascript 調用 MSXML 得到的轉換結果卻是正常的 - <br /> 可以正常的顯示出來。檔案是這樣寫的(部分)

XML:

<root>
    <a><![CDATA[AAAAAA <br /> BBBBBB<br />CCCCCC]]></a>
</root>

XSLT:

<xsl:value-of disable-output-escaping="yes" select="/root/a"/>


Javascript

    var xml = new ActiveXObject("Msxml2.DOMDocument.4.0");
 xml.load("a.xml"); 
    var xslt = new ActiveXObject("Msxml2.DOMDocument.4.0");
 xslt.load("a.xslt");
 document.write(xml.transformNode(xslt));


C# 

 

            XslTransform xslt = new XslTransform();
            XmlDocument xml = new XmlDocument();
            xslt.Load("a.xslt");
            xml.Load(("a.xml"));
            using (XmlTextWriter writer = new XmlTextWriter("a.doc", Encoding.Default))
            {
                xslt.Transform(xml, null, writer, null);
                writer.Close();
            }

 

就是上面的這些代碼,用瀏覽器直接看 xml 檔案和 javascript 都是正常的輸出的結果,就像事先設想的那樣:

AAAAAA 
BBBBBB
CCCCCC 

但是 C# 那個版本的就是輸出不了 <br />, 結果是這樣的:

AAAAAABBBBBBCCCCCC 


Google 半天找到原來是這樣樣子的 XmlWriter XmlReader 將忽略 XSLT 中的 disable-output-escaping 這個選項(詳情參考 http://www.dotnet247.com/247reference/msgs/28/142194.aspx)。將上述 C# 代碼中的 XmlTextWriter 換成 FileStream 一切搞定。

System.IO.Stream strmTemp = new System.IO.FileStream("a.doc", System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite);

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.