腐女漫画吧贴吧:WebBrowser控件显示XML流 - 令狐冲和酒壶 - 博客园
来源:百度文库 编辑:九乡新闻网 时间:2024/05/04 18:39:11
WebBrowser控件显示XML流
VS2005里集成的WebBrowser控件,就是一个IE浏览器,如果想用它来相显示XML字符串,并达到IE的效果,我总结了一下,有如下几种方法:文件显示法:可以以文件的形式显示!将你要显示的XML串存到本地文件里,并将WebBrowser的Url属性指向这个文件即可!这种方法简易,有效,但不一定实用,因为大部分时间我们要做的工作是将一个XML流显示出来。当然,我们可以将XML流存到一个临时文件里,之后再用第一种方法来显示这个XML串;但是,我们还有更好的方法,不用在本地生成临时文件!
首先,看看IE是怎样显示XML串的。当我们用IE打开XML文件时,在IE里显示的是一个按XML文档格式缩进的,并可以折起和展开的XML字符串。其实IE只是用它内嵌的XSLT文件,将XML转成了我们看到的html代码。那么同理,我们也可以将我们要显示的XML字符串用XSLT转换成html代码,并赋给WebBrowser的DocumentText属性。如果你是XSLT高手,那么你可以自己写一段XSLT,之后用如下代码来完成工作:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Xsl;
using System.IO;
namespace WindowsApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string xml = String.Empty; //Xml字符串
string xslt = String.Empty; //Xslt字符串
XmlReader reader = null; //要转换的Xml
MemoryStream readerstream = new MemoryStream(); //要转换的Xml流
XmlWriter writer = null; //转换后的字符串
MemoryStream writerstream = new MemoryStream(); //转换后的字符串流
XslCompiledTransform trans = new XslCompiledTransform(); //Xslt对象 System.Xml.Xsl命名空间下
MemoryStream stream = new MemoryStream(); //Xslt流
XmlReader xsltreader = null;
string returnValue = String.Empty; //转换后的html代码
byte[] byteArray = Encoding.UTF8.GetBytes(xslt);
try
{
//取得Xslt流
stream.Write(byteArray, 0, byteArray.Length);
xsltreader = XmlReader.Create(stream);
//取得要转换的Xml流
byte[] byteXml = Encoding.UTF8.GetBytes(xml);
readerstream.Write(byteXml,0,byteXml.Length);
reader = XmlReader.Create(readerstream);
//取得转换后的字符串流
writer = XmlWriter.Create(writerstream);
trans.Load(xsltreader);
trans.Transform(reader, writer);
writerstream.Position = 0;
returnValue = new StreamReader(writerstream).ReadToEnd();
this.webBrowser1.DocumentText = returnValue; //将html代码赋给WebBrowser的DocumentText属性
}
finally
{
readerstream.Close();
writerstream.Close();
stream.Close();
if (reader != null)
{
reader.Close();
}
if (writer != null)
{
writer.Close();
}
if (xsltreader != null)
{
xsltreader.Close();
}
}
}
}
}
如果很不幸,你跟我一样,对XSLT并不十分精通,也没有关系,你可以用Microsoft提供的defaultss.xsl文件,网上有很多文章介绍怎么得到这个文件。不过,如果你使用defaultss.xsl这个文件的话,就不能再用以上方法了,因为XslCompiledTransform类的Load方法,只能读取符合xslt 1.0标准的XSLT文件,但defualtss.xsl并不完全符合这个标准。那么,这时,我们可以采用另外一种方法,那就是引用COM!你可以引Microsoft XML 3.0 Parser(如果你本机安装了的话),并使用如下方法完成工作:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Xsl;
using System.IO;
namespace WindowsApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MSXML2.DOMDocument30Class xml = new MSXML2.DOMDocument30Class(); //Xml对象
MSXML2.DOMDocument30Class xslt = new MSXML2.DOMDocument30Class(); //Xslt对象
xml.loadXML(""); //读取Xml字符串
xslt.loadXML(""); //读取Xslt字符串
this.webBrowser1.DocumentText = xml.transformNode(xslt); //将转换的html字符串赋给WebBrowser控件
}
}
}
如果你不想有临时文件,也不想引用COM的话,那么还有如下方法可供选择,呵呵!
正如前边所说,WebBrowser就像个IE,那么既然是IE,就会支持javascript,那么我们可以以客户端调用的方式来实现Xml文件的转换
这段html文件其实是一个模板,你可以把它存在Resource文件里,之后在向WebBrowser的DocumentText属性赋值之前,将模板里的@@XML用你实际想显示的XML串替换一下,同时没忘了将这个XML串里的"替成\"!
又写完了一篇心得,希望能对大家有所帮助
WebBrowser控件显示XML流 - 令狐冲和酒壶 - 博客园
mp3显示歌词控件
wicket日期控件显示
获取和设置MasterPage 中控件的值 - 叶翔 - 博客园
浏览器集成教学 在你的应用程序中集成WebBrowser控件 - Visual C - 第七城市
MSComm串口控件使用出错 - 博客文库 - 博客园
Ant之build.xml详解 - CookStar - 博客园
XML数据库:最新进展和发展方向
酒壶诗
(转贴)服务器控件生命周期 - Betty的快乐小窝 - ai火星鼠 - 和讯博客
在Palette上隐藏与显示控件 - Delphi_教程
VB中如何设定COM组件和ActiveX控件的CLSID值 - 没个性的日志 - 网易博客
android日期和时间控件使用方法
传智播客:xml入门以及解析xml文件 - habernate的日志 - 网易博客
神奇的寿星酒壶
vc中的XML编程心得【原创】,懿懿博客sss
我是令狐冲[原创]
令狐冲 人物介绍
令狐冲武侠全集
显示和隐藏文字特效
显示IP和城市
显示和隐藏网格线
写操作xml文件,进程和线程同时写
WebSphere DataStage XML 和 Web Services 包转换...