2011-05-18 85 views
1

我有一个带有Web浏览器控件的Windows窗体。点击一个按钮后,打开一个FileBrowserDialog,用户可以选择一个XML文件。我现在用 webBrowser1.Navigate(FileBrowserDialog1);显示这个XML文件。在不带XSL的Web浏览器控件中显示xml

的问题是,当一个XSL文件的XML文件内声明的它显示了XML文件与XSL文件的布局。

我正在寻找一种方式来显示,而不XSL文件的XML文件。

+0

对多次编辑抱歉,我认为我现在完成:) – Tao 2011-05-18 12:28:07

+0

只是好奇,但是有一个原因,你需要显示它在web浏览器控制?只读的多行文本框不够用吗? – Flynn1179 2011-05-18 12:37:04

回答

0

你可以使用标准的XML到HTML的样式表转换XML转换成HTML,并显示在WebBrowser控件生成的HTML。示例XSLT在此处达到此目的:http://www2.informatik.hu-berlin.de/~obecker/XSLT/

此方法的优点是您可以完全控制Xml的样式,如控件中所示。缺点是样式最有可能与Xml文档上的标准IE样式不匹配(如果那是你正在寻找的)。

还要说明一点:显示自定义HTML(标准XSLT生成的HTML,在这种情况下),你就必须做出一些小的修改WebBrowser控件。 discussion/overview heresimple class that achieves this (from another project of mine) here

0

如果您查看页面的源代码,你会得到原始XML。

中嵌入XML文件中的样式表总是导致浏览器转换和显示的转变 - 有没有办法来解决这一点。

0

注:这是不行的,不这样做。

我曾建议尝试

webBrowser1.DocumentText = File.ReadAllText(FileBrowserDialog1); 

在此希望它会加载XML文档作为一个字符串,并将其传输“原样”的Web浏览器控件。不幸的是,它并没有向你展示XML,它试图把它当作HTML来处理。

+0

其中仍然会包含<?xsl:stylesheet ..?>说明...您的观点是什么? – Bora 2011-05-18 12:16:46

+0

嗯,我确实说过我不确定它是否会起作用。你试过了吗? – Flynn1179 2011-05-18 12:17:37

+0

嗯,我只是建立了一个简单的测试,果然,它不会像这样工作。 – Flynn1179 2011-05-18 12:25:33

0

您需要解析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>