首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 在WEBSERVICE 中对XML的操作 [已结贴,结贴人:panzi667]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-20 10:03:00 楼主
    我在WEBSERVICE中定义一个类

    C# code
    [WebMethod(Description = "在线更新软件")] public System.Xml.XmlDocument GetUpdateData() { //取得更新的xml模板内容 XmlDocument doc = new XmlDocument(); doc.Load(Server.MapPath("update.xml")); XmlElement root = doc.DocumentElement; //看看有几个文件需要更新 XmlNode updateNode = root.SelectSingleNode("filelist"); string path = updateNode.Attributes["sourcepath"].Value; int count = int.Parse(updateNode.Attributes["count"].Value); //将xml中的value用实际内容替换 for (int i = 0; i < count; i++) { XmlNode itemNode = updateNode.ChildNodes[i]; string fileName = path + itemNode.Attributes["name"].Value; FileStream fs = File.OpenRead(Server.MapPath(fileName)); itemNode.Attributes["size"].Value = fs.Length.ToString(); BinaryReader br = new BinaryReader(fs); //这里是文件的实际内容,使用了Base64String编码 itemNode.SelectSingleNode("value").InnerText = Convert.ToBase64String(br.ReadBytes((int)fs.Length), 0, (int)fs.Length); br.Close(); fs.Close(); } return doc; }


    但是我在客户端引用的时候出现问题:
    无法将类型为“System.Xml.XmlElement”的对象强制转换为类型“System.Xml.XmlDocument”。
    C# code
    public void update() { WebSvs.Service1 webs = new WebSvs.Service1(); [color=#FF0000] System.Xml.XmlDocument doc = ((System.Xml.XmlDocument)webs.GetUpdateData());[/color] doc.Save(Application.StartupPath + @"\update.xml"); System.Diagnostics.Process.Start(Application.StartupPath + @"\update.exe"); Close(); Application.Exit(); }
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-20 10:19:161楼 得分:17
    C# code
    [WebMethod(Description = "在线更新软件")] public string GetUpdateData() { //取得更新的xml模板内容 XmlDocument doc = new XmlDocument(); doc.Load(Server.MapPath("update.xml")); XmlElement root = doc.DocumentElement; //看看有几个文件需要更新 XmlNode updateNode = root.SelectSingleNode("filelist"); string path = updateNode.Attributes["sourcepath"].Value; int count = int.Parse(updateNode.Attributes["count"].Value); //将xml中的value用实际内容替换 for (int i = 0; i < count; i++) { XmlNode itemNode = updateNode.ChildNodes[i]; string fileName = path + itemNode.Attributes["name"].Value; FileStream fs = File.OpenRead(Server.MapPath(fileName)); itemNode.Attributes["size"].Value = fs.Length.ToString(); BinaryReader br = new BinaryReader(fs); //这里是文件的实际内容,使用了Base64String编码 itemNode.SelectSingleNode("value").InnerText = Convert.ToBase64String(br.ReadBytes((int)fs.Length), 0, (int)fs.Length); br.Close(); fs.Close(); } return doc.InnerXml; } public void update() { WebSvs.Service1 webs = new WebSvs.Service1(); [color=#FF0000] System.Xml.XmlDocument doc = new XmlDocument();[color] string xml= webs.GetUpdateData();[/color] doc.LoadXml(xml); doc.Save(Application.StartupPath + @"\update.xml"); System.Diagnostics.Process.Start(Application.StartupPath + @"\update.exe"); Close(); Application.Exit(); }



    webservice最好不好返回引用的类型
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-20 10:56:002楼 得分:0
    这个是做客户端自动升级的代码,哪么怎么解决呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-20 11:06:113楼 得分:17
    mark
    回复内容太短了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-20 13:21:354楼 得分:0
    如果是引用的话
    不需要转换吧
    System.Xml.XmlDocument doc = webs.GetUpdateData();

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-20 15:13:545楼 得分:17
    webservice还有这个功能呀,我的客户端升级程序是直接到指定的服务器上下载的,呵呵!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-20 15:17:506楼 得分:0
    如果是按照4楼的方法,出现下面的错误
    错误 1 无法将类型“System.Xml.XmlNode”隐式转换为“System.Xml.XmlDocument”。存在一个显式转换(是否缺少强制转换?) E:\temp\update\WindowsApplication1\WindowsApplication1\Form1.cs 40 42 WindowsApplication1

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-20 15:22:047楼 得分:0
    不行你就按照我第一给你出的主意
    返回字符串吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-21 08:18:338楼 得分:0
    按照你说的更改了,但是还是不行
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-21 08:31:239楼 得分:17
    你的返回值就是XmlNode型的吧.那前面就不用转了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-21 09:19:1510楼 得分:16
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-21 11:13:4411楼 得分:0
    引用 9 楼 sxmonsy 的回复:
    你的返回值就是XmlNode型的吧.那前面就不用转了.


    哪么代码怎么写?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • devie
    • 等级:
    发表于:2008-06-21 11:32:0712楼 得分:16
    webservice客户端使用的时候整体返回的是一个document,所有函数的返回值都是一个node,你要作为一个document使用,只能自己转换一下,使用parseXml方法吧
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved