C#在WebBrowser或任何其他组件中显示XML

时间:2012-04-24 06:12:37

标签: c# xml browser

我真正需要的是在组件中显示XML。到目前为止,我已经使用webbrowser组件来显示我的XML数据,这里是代码:

//XDocument loaded_xml = new XDocument();
        var stream = new MemoryStream();
        loaded_xml.Save(stream);
        stream.Position = 0;
        WebBrowser1.DocumentStream = stream;

问题是它不会在我的webbrowser中呈现xml,但是当我右键单击它并查看源代码时,xml内容就在那里!!

最后,如果有任何其他组件在其中显示XML,我将很高兴得知:) 提前谢谢......

1 个答案:

答案 0 :(得分:1)

关于使用IE使用的默认XSL,有一个解释here

这是从该文章中复制粘贴的,因为您似乎无法访问它。 归功于作者

Internet Explorer以相当不错的方式显示XML。今天我想我会使用相同的引擎在.NET 2.0应用程序中显示XML。所以我将一个WebBrowser控件放到一个表单上,并将我的XML字符串分配给DocumentText属性。瞧?当然不是。

经过一番挖掘,我发现IE使用内置的XSLT转换在浏览器中将XML呈现为HTML。有问题的样式表可以从IE中的以下uri获得:res://msxml.dll/defaultss.xsl。那么,那么可以保存这个字符串,并在.NET中使用它?不完全的。事实证明,IE使用的XSL与.NET的XslCompiledTransform类不兼容。 D'哦!

经过一番挖掘后,事实证明Steve Muench已经完成了.NET所需的XSLT 1.0 REC的转换。谢啦!该文件可以在这里下载。

我将以下代码添加到我的WebBrowser基类中,以允许开发人员通过设置属性来显示XML:

public XmlDocument DocumentXml
{
set
{
Stream s = <defaultss.xsl from embedded resource file>

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();
}
}