我有一個帶有Web瀏覽器控件的Windows窗體。點擊一個按鈕後,打開一個FileBrowserDialog
,用戶可以選擇一個XML文件。我現在用 webBrowser1.Navigate(FileBrowserDialog1);
顯示這個XML文件。在不帶XSL的Web瀏覽器控件中顯示xml
的問題是,當一個XSL文件的XML文件內聲明的它顯示了XML文件與XSL文件的佈局。
我正在尋找一種方式來顯示,而不XSL文件的XML文件。
我有一個帶有Web瀏覽器控件的Windows窗體。點擊一個按鈕後,打開一個FileBrowserDialog
,用戶可以選擇一個XML文件。我現在用 webBrowser1.Navigate(FileBrowserDialog1);
顯示這個XML文件。在不帶XSL的Web瀏覽器控件中顯示xml
的問題是,當一個XSL文件的XML文件內聲明的它顯示了XML文件與XSL文件的佈局。
我正在尋找一種方式來顯示,而不XSL文件的XML文件。
你可以使用標準的XML到HTML的樣式錶轉換XML轉換成HTML,並顯示在WebBrowser控件生成的HTML。示例XSLT在此處達到此目的:http://www2.informatik.hu-berlin.de/~obecker/XSLT/
此方法的優點是您可以完全控制Xml的樣式,如控件中所示。缺點是樣式最有可能與Xml文檔上的標準IE樣式不匹配(如果那是你正在尋找的)。
還要說明一點:顯示自定義HTML(標準XSLT生成的HTML,在這種情況下),你就必須做出一些小的修改WebBrowser控件。 discussion/overview here和simple class that achieves this (from another project of mine) here。
如果您查看頁面的源代碼,你會得到原始XML。
中嵌入XML文件中的樣式表總是導致瀏覽器轉換和顯示的轉變 - 有沒有辦法來解決這一點。
注:這是不行的,不這樣做。
我曾建議嘗試
webBrowser1.DocumentText = File.ReadAllText(FileBrowserDialog1);
在此希望它會加載XML文檔作爲一個字符串,並將其傳輸「原樣」的Web瀏覽器控件。不幸的是,它並沒有向你展示XML,它試圖把它當作HTML來處理。
您需要解析XML並刪除包含處理指令的行。
替代方案:
讀爲XML,通過XslCompiledTransform處理並過濾出處理指令節點。我只是測試的例子
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="processing-instruction('xml-stylesheet')"/>
<xsl:template match="@*|node()|comment()">
<xsl:copy>
<xsl:apply-templates select="@*|node()|comment()"/>
</xsl:copy>
</xsl:template>
要轉變這樣的文件:
<?xml version='1.0'?>
<?xml-stylesheet href="dontwant.xsl" type="text/xsl"?>
<root>
<!-- comments should stay in the output -->
<node1>
<node11></node11>
</node1>
<node2/>
</root>
到這一點:
<?xml version="1.0" encoding="utf-8"?><root>
<!-- comments should stay in the output -->
<node1>
<node11 />
</node1>
<node2 />
</root>
對多次編輯抱歉,我認爲我現在完成:) – Tao 2011-05-18 12:28:07
只是好奇,但是有一個原因,你需要顯示它在web瀏覽器控制?只讀的多行文本框不夠用嗎? – Flynn1179 2011-05-18 12:37:04