我有一个带有Web浏览器控件的Windows窗体。点击一个按钮后,打开一个FileBrowserDialog
,用户可以选择一个XML文件。我现在用 webBrowser1.Navigate(FileBrowserDialog1);
显示这个XML文件。在不带XSL的Web浏览器控件中显示xml
的问题是,当一个XSL文件的XML文件内声明的它显示了XML文件与XSL文件的布局。
我正在寻找一种方式来显示,而不XSL文件的XML文件。
我有一个带有Web浏览器控件的Windows窗体。点击一个按钮后,打开一个FileBrowserDialog
,用户可以选择一个XML文件。我现在用 webBrowser1.Navigate(FileBrowserDialog1);
显示这个XML文件。在不带XSL的Web浏览器控件中显示xml
的问题是,当一个XSL文件的XML文件内声明的它显示了XML文件与XSL文件的布局。
我正在寻找一种方式来显示,而不XSL文件的XML文件。
你可以使用标准的XML到HTML的样式表转换XML转换成HTML,并显示在WebBrowser控件生成的HTML。示例XSLT在此处达到此目的:http://www2.informatik.hu-berlin.de/~obecker/XSLT/
此方法的优点是您可以完全控制Xml的样式,如控件中所示。缺点是样式最有可能与Xml文档上的标准IE样式不匹配(如果那是你正在寻找的)。
还要说明一点:显示自定义HTML(标准XSLT生成的HTML,在这种情况下),你就必须做出一些小的修改WebBrowser控件。 discussion/overview here和simple class that achieves this (from another project of mine) here。
如果您查看页面的源代码,你会得到原始XML。
中嵌入XML文件中的样式表总是导致浏览器转换和显示的转变 - 有没有办法来解决这一点。
注:这是不行的,不这样做。
我曾建议尝试
webBrowser1.DocumentText = File.ReadAllText(FileBrowserDialog1);
在此希望它会加载XML文档作为一个字符串,并将其传输“原样”的Web浏览器控件。不幸的是,它并没有向你展示XML,它试图把它当作HTML来处理。
您需要解析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>
对多次编辑抱歉,我认为我现在完成:) – Tao 2011-05-18 12:28:07
只是好奇,但是有一个原因,你需要显示它在web浏览器控制?只读的多行文本框不够用吗? – Flynn1179 2011-05-18 12:37:04