2011-05-18 81 views
1

我有一個帶有Web瀏覽器控件的Windows窗體。點擊一個按鈕後,打開一個FileBrowserDialog,用戶可以選擇一個XML文件。我現在用 webBrowser1.Navigate(FileBrowserDialog1);顯示這個XML文件。在不帶XSL的Web瀏覽器控件中顯示xml

的問題是,當一個XSL文件的XML文件內聲明的它顯示了XML文件與XSL文件的佈局。

我正在尋找一種方式來顯示,而不XSL文件的XML文件。

+0

對多次編輯抱歉,我認爲我現在完成:) – Tao 2011-05-18 12:28:07

+0

只是好奇,但是有一個原因,你需要顯示它在web瀏覽器控制?只讀的多行文本框不夠用嗎? – Flynn1179 2011-05-18 12:37:04

回答

0

你可以使用標準的XML到HTML的樣式錶轉換XML轉換成HTML,並顯示在WebBrowser控件生成的HTML。示例XSLT在此處達到此目的:http://www2.informatik.hu-berlin.de/~obecker/XSLT/

此方法的優點是您可以完全控制Xml的樣式,如控件中所示。缺點是樣式最有可能與Xml文檔上的標準IE樣式不匹配(如果那是你正在尋找的)。

還要說明一點:顯示自定義HTML(標準XSLT生成的HTML,在這種情況下),你就必須做出一些小的修改WebBrowser控件。 discussion/overview heresimple class that achieves this (from another project of mine) here

0

如果您查看頁面的源代碼,你會得到原始XML。

中嵌入XML文件中的樣式表總是導致瀏覽器轉換和顯示的轉變 - 有沒有辦法來解決這一點。

0

注:這是不行的,不這樣做。

我曾建議嘗試

webBrowser1.DocumentText = File.ReadAllText(FileBrowserDialog1); 

在此希望它會加載XML文檔作爲一個字符串,並將其傳輸「原樣」的Web瀏覽器控件。不幸的是,它並沒有向你展示XML,它試圖把它當作HTML來處理。

+0

其中仍然會包含<?xsl:stylesheet ..?>說明...您的觀點是什麼? – Bora 2011-05-18 12:16:46

+0

嗯,我確實說過我不確定它是否會起作用。你試過了嗎? – Flynn1179 2011-05-18 12:17:37

+0

嗯,我只是建立了一個簡單的測試,果然,它不會像這樣工作。 – Flynn1179 2011-05-18 12:25:33

0

您需要解析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>