在不带 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 文件的方法。

在不带 XSL 的 Web 浏览器控件中显示 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。