如何使用WebBrowser控件显示XML?

我有一个包含xmlstring 。 我想用它设置WebBrowser控件的值并显示为xml

我可以使用browser.DocumentText设置值,但是如何告诉它显示为XML?

不是特别容易但可能。 您可以将字符串保存在xml文件中并使用Navigate()(yuck …)将其加载回来,或者将xsl应用于xml(不开玩笑!),使其像IE浏览器一样呈现。

看到:

http://social.msdn.microsoft.com/Forums/en/winforms/thread/18ca6734-ddb7-4f44-a77c-9a7713dcc2e1

为@PaoloFalabella建议的第一个解决方案提供一些代码(即将字符串内容写入临时xml文件并导航到它):

 //create a random temporary file with an .xml file extension var path = Path.GetTempPath(); var fileName = Guid.NewGuid().ToString() + ".xml"; var fullFileName = Path.Combine(path, fileName); //write the contents of your xml string to the temporary file we just created File.WriteAllText(fullFileName, xmlText); //xmlText is your xml string //"navigate" to the file webBrowser.Navigate(fullFileName); //webBrowser is your WebBrowser control 

这里有一个很好的链接: 在.NET WebBrowser控件中显示XML

 public XmlDocument DocumentXml { set { Stream s =  XmlReader xr = XmlReader.Create(s); XslCompiledTransform xct = new XslCompiledTransform(); xct.Load(xr); StringBuilder sb = new StringBuilder(); XmlWriter xw = XmlWriter.Create(sb); xct.Transform(value, xw); this.DocumentText = sb.ToString(); } } 

在这里,我提供了在WebBrowser控件中显示XML文件的分步解决方案。

  1. 在WinForm中添加WebBrowser控件。
  2. 在源文件夹中的某处找到defaultss.xsl。
  3. 并复制下面的方法。

     private void DisplayXml() { string xmlString = "Fawad23"; // Load the xslt used by IE to render the xml XslCompiledTransform xTrans = new XslCompiledTransform(); xTrans.Load(Path.Combine(new DirectoryInfo(Environment.CurrentDirectory).Parent.Parent.FullName, @"resources\defaultss.xsl")); // Read the xml string. StringReader sr = new StringReader(xmlString); XmlReader xReader = XmlReader.Create(sr); // Transform the XML data MemoryStream ms = new MemoryStream(); xTrans.Transform(xReader, null, ms); ms.Position = 0; // Set to the document stream webBrowser1.DocumentStream = ms; } 

我在这里复制“defaultss.xsl”的内容给那些在任何地方都找不到它的人。 只需将其放在记事本文件中,然后将其保存为文件夹“resources”中的xsl格式,或者将其命名为您想要的任何内容。

                   
nbsp lt ? nbsp ?>
nbsp lt ? xml =" " ?>
x t =" "
lt !--
  

nbsp -->

nbsp lt x t />

- lt x t >

nbsp lt ?/ x t >

nbsp lt x t > lt / x t >

- lt x t >

nbsp lt / x t >

& ;

 var responseXml = " your xml string "; var path = Path.Combine(Path.GetTempPath(), "Response.xml"); var responseXmlDocument = new XmlDocument(); responseXmlDocument.LoadXml(responseXml); responseXmlDocument.Save(path); responseWebBrowser.Navigate(path); 

答案很简单。 我们只需要使用WebBrowser控件的DocumentText属性,如下所示:

 this.webBrowserControl.DocumentText = varWithXMLString; 

我在控件文档中找不到的细节是字符串必须满足以下要求:

  1. 它必须是格式良好的XML文档
  2. 必须包含XML序言:
  3. 必须validationXML字符串不包含UTF-8 BOM字符 (我进行此研究的原因)。 这是很难通过C#字符串转换来检测的,它会生成一个不可打印的字符, 只有在字符串转换为byte或int数组时才可见

在下面的Github存储库是我开发的示例,用于显示这些validation: https : //github.com/batressc/WinFormsWebBrowserXML

在以下链接中,您可以详细了解示例的开发(西class牙语): http : //batrianoworld.batressc.com/2018/07/22/visualizacion-de-xml-utilizando-control-webbrowser-de-windowsforms

你不需要保存临时文件,只需这样做……

 browserControl.NavigateToString(xml);