2013-10-09 52 views
0

我使用WebBrowser來顯示生成的XML。我的XML字符串加載到瀏覽器中調用NavigateToString:WPF WebBrowser - 內置搜索對話框不起作用,如果內容加載NavigateToString

var text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
     + Environment.NewLine 
     + "<whatever/>"; 
Browser.NavigateToString(text); 

瀏覽器加載字符串內容後,我試圖尋找使用標準的Ctrl + F搜索對話框中顯示的任何文本 - 但它總是顯示警告「沒有找到匹配」。

如果我將XML字符串保存到文件並使用Browser.Navigate(文件名),它將起作用。

任何想法?

+0

而不是連接字符串,使用'StringBuilder'類,不知道這是否會解決您的問題,但它是值得一試。 – Tico

+0

如果你在html標籤中包裝字符串,'Browser.NavigateToString(string.Format(「 {0}」,text));' –

+0

@Tico感謝StringBuilder提示,但在這裏我試圖保留示例代碼非常簡單,吸引人們關注NavigateToString方法。 – user2617500

回答

0

當您導航到文件時,WebBrowser控件執行MIME類型的嗅探(通常使用文件擴展名作爲提示)。然後它創建相應類型的Active Document對象。通常它是MSHTML Document的實例,但也可以是XML,PDF或Word文檔,所有這些文檔都支持Active Document界面。

現在,當您導航到NavigateToString的字符串時,WebBrowser不會嘗試識別文檔類型,只是創建MSHTML文檔(而不是XML文檔)並實例化,然後嘗試解析內容作爲HTML並失敗。

我不認爲你可以使用NavigateToString得到想要的行爲,我相信這同樣適用於NavigateToStream。爲了說明發生了什麼,請將XML內容保存爲filename.html,filename.txtfilename.xml。嘗試使用IE打開每個文件。

在附註中,當您導航到URL時,服務器實際上有一個選項可以使用HTTP標頭來推薦MIME類型。瀏覽器可能會或可能不會容忍這樣的建議(它仍然會執行一些驗證檢查)。

底線:您將無法使用NavigateToStringNavigateToStream呈現XML。您將不得不先將其轉換爲HTML(例如,使用XSLT轉換)。