LoadXML的正确使用(原文:http://blog.sina.com.cn/s/blog_68530d690100mlcp.html)


LoadXML是MS提供的XMLDom接口中的一个函数,用于将字符串载入一个XML document,该函数的使用存在很多注意事项,在近来的开发调用中总结出以下几点:
1、字符串必须是一个完整的xml document或者well-formed的片段,否则会出现异常退出的错误。常在编程中,因内存分配不足等原因,使的传入的字符串于某处意外截断,尤其当字符串过长时,该错误不易发现。调试状态下,可通过获取字符串的长度后对末尾部分观察来判断,对较短的片段,可简单的将字符串复制到Altova Spy等专用xml编辑器中观察是否well-formed.
2、 LoadXML 方法总是采用只在 UCS-2 或 UTF-16 中编码的 Unicode BSTR,所以当字符串是UTF-8编码格式时,需要首先对其进行转换,才能够传入函数,否则即使该函数成功执行,后续对dom结构中内容的访问也会出现错误,尤其是出现中文乱码的情况.
3、参数是 BSTR类型,当string长度过长时,如果通过强制转换 (_bstr_t)str传入函数,则在转换时会出现overflow的异常,故正确的方法是先利用AllocSysString将CString转换为BSTR,再传入函数。
4、若采用Load方法根据本地文件路径获取xml document,则当原始字符串存入目标文件时,或根据系统编码类型对文件编码,故存在要点2的隐患,这是该方法比Load方法优势的地方。
目前程序出现的问题暂都是由这几个原因造成。未来出现新问题时再做补充!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用C#的`HttpClient`类来调用WebService接口,并传递参数和接收返回值。以下是一个示例代码: ```csharp using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Xml; namespace WebServiceExample { class Program { static async Task Main(string[] args) { // 接口地址 string url = "http://10.10.47.132:8103/soap/IWebService"; // 创建HttpClient对象 HttpClient client = new HttpClient(); // 创建SOAP请求内容 string soapRequest = @"<?xml version=""1.0"" encoding=""utf-8""?> <soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/""> <soap:Body> <YourMethodName xmlns=""YourNamespace""> <Param1>Value1</Param1> <Param2>Value2</Param2> </YourMethodName> </soap:Body> </soap:Envelope>"; // 设置请求头部信息 client.DefaultRequestHeaders.Add("SOAPAction", "YourSOAPAction"); // 发送请求并获取响应 HttpResponseMessage response = await client.PostAsync(url, new StringContent(soapRequest, Encoding.UTF8, "text/xml")); // 读取响应内容 string responseContent = await response.Content.ReadAsStringAsync(); // 解析XML响应 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(responseContent); // 提取返回值 XmlNamespaceManager nsManager = new XmlNamespaceManager(xmlDoc.NameTable); nsManager.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/"); nsManager.AddNamespace("ns", "YourNamespace"); XmlNode resultNode = xmlDoc.SelectSingleNode("//ns:YourMethodNameResponse/ns:YourMethodNameResult", nsManager); string result = resultNode.InnerText; // 输出返回值 Console.WriteLine("返回值: " + result); } } } ``` 你需要将上述代码中的以下部分进行替换: - `url`:将其替换为你的WebService接口地址。 - `soapRequest`:将其替换为你的SOAP请求内容。 - `"YourMethodName"`:将其替换为你要调用的WebService方法名。 - `"YourNamespace"`:将其替换为你的命名空间。 - `"YourSOAPAction"`:将其替换为你的SOAPAction。 请确保你的应用程序具有访问WebService接口的权限,并根据实际情况修改代码以适应你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值