0

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

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

问题是它没有在我的网络浏览器中呈现 xml,但是当我右键单击它并查看源代码时,xml 内容就在那里!!

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

4

1 回答 1

1

这里有一个关于使用 IE 使用的默认 XSL 的解释。

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

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

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

经过更多的挖掘,事实证明 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();
}
}
于 2012-04-24T06:18:01.807 回答