在不带 XSL 的 Web 浏览器控件中显示 XML
本文关键字:控件 显示 XML 浏览器 Web XSL | 更新日期: 2023-09-27 17:56:41
我有一个带有Web浏览器控件的Windows表单。单击按钮时,将打开一个FileBrowserDialog
,用户可以选择 XML 文件。我现在正在显示这个 XML 文件 webBrowser1.Navigate(FileBrowserDialog1);
.
问题是,当在 XML 文件中声明 XSL 文件时,它会显示具有 XSL 文件布局的 XML 文件。
我正在寻找一种在没有 XSL 文件的情况下显示 xml 文件的方法。
如果您查看页面的源代码,您将获得原始 XML。
在 XML 文件中嵌入样式表将始终导致浏览器转换并显示转换 - 没有办法解决这个问题。
您需要解析 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>
您可以使用标准的 Xml-to-HTML 样式表将 Xml 转换为 HTML,并在 WebBrowser 控件中显示生成的 HTML。在此处实现此目的的示例 XSLT:http://www2.informatik.hu-berlin.de/~obecker/XSLT/
此方法的优点是可以完全控制控件中显示的 Xml 样式。缺点是样式很可能与 Xml 文档上的标准 IE 样式不匹配(如果这是您要查找的内容)。
还有一点需要注意:要显示自定义 html(在本例中为标准 XSLT 生成的 HTML),您必须对 WebBrowser 控件进行一些小的修改。 在这里讨论/概述,以及一个简单的类来实现这一点(来自我的另一个项目)。
注意:这行不通,不要这样做。
我曾建议尝试
webBrowser1.DocumentText = File.ReadAllText(FileBrowserDialog1);
希望它将 XML 文档作为字符串加载,并将其"按原样"传输到 Web 浏览器控件。不幸的是,它实际上并没有向您显示XML,而是尝试将其视为HTML。