c# 读取XML数据

1.首先调用接口,要有一个post数据到指定url并返回数据的函数:

    protected string PostXmlToUrl(string url, string postData)
    {
        string returnmsg = "";
        using (System.Net.WebClient wc = new System.Net.WebClient())
        {
            returnmsg = wc.UploadString(url, "POST", postData);
        }
        return returnmsg;
    }

post的数据格式可以是

url的参数格式(a=1&b=2&c=3....)

xml格式(<xml>....</xml>)

返回的数据格式由接口确定。

2.方法调用:

        post_data = wxPayBaseHelper.UnifiedPayOrder(wxobPay, key);

        requestData = PostXmlToUrl("https://api.mch.weixin.qq.com/pay/unifiedorder", post_data);

这里post_data是一段xml字符串:

<xml>
   <appid>wx2421b1c4370ec43b</appid>
   <attach>支付测试</attach>
   <body>JSAPI支付测试</body>
   <mch_id>10000100</mch_id>
   <nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>
   <notify_url>http://wxpay.weixin.qq.com/pub_v2/pay/notify.v2.php</notify_url>
   <openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
   <out_trade_no>1415659990</out_trade_no>
   <spbill_create_ip>14.23.150.211</spbill_create_ip>
   <total_fee>1</total_fee>
   <trade_type>JSAPI</trade_type>
   <sign>0CB01533B8C1EF103065174F50BCA001</sign>
</xml> 

返回来的requestData也是一段xml字符串:

<xml>
   <return_code><![CDATA[SUCCESS]]></return_code>
   <return_msg><![CDATA[OK]]></return_msg>
   <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
   <mch_id><![CDATA[10000100]]></mch_id>
   <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
   <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
   <result_code><![CDATA[SUCCESS]]></result_code>
   <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
   <trade_type><![CDATA[JSAPI]]></trade_type>
</xml> 

调用此接口是为了获取prepay_id,接口返回来的结果包含了prepay_id,接下来把它取出,先要一个把xml字符串转换为SortedDictionary类型的函数:

        /// <summary>
        /// 把XML数据转换为SortedDictionary<string, string>集合
        /// </summary>
        /// <param name="strxml"></param>
        /// <returns></returns>
        public SortedDictionary<string, string> GetInfoFromXml(string xmlstring)
        {
            SortedDictionary<string, string> sParams = new SortedDictionary<string, string>();
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xmlstring);
                XmlElement root = doc.DocumentElement;
                int len = root.ChildNodes.Count;
                for (int i = 0; i < len; i++)
                {
                    string name = root.ChildNodes[i].Name;
                    if (!sParams.ContainsKey(name))
                    {
                        sParams.Add(name.Trim(), root.ChildNodes[i].InnerText.Trim());
                    }
                }
            }
            catch (Exception ex)
            {
                //LxCommomHelper.Commom.TraceLog.LogWrite(ex.ToString(), LxCommomHelper.Commom.LogEnum.Pay);
            }
            return sParams;
        }

然后调用方法:

        SortedDictionary<string, string> requestXML = wxPayBaseHelper.GetInfoFromXml(requestData);
        foreach (KeyValuePair<string, string> k in requestXML)
        {
            if (k.Key == "prepay_id")
            {
                prepay_id = k.Value;
                break;
            }
        }

ok,又获取到了prepay_id,最后是发起微信支付了,待续。

时间: 2024-10-18 04:38:43

c# 读取XML数据的相关文章

读取 XML 数据时,超出最大字符串内容长度配额 (8192)

问题描述,在调用接口报错: 格式化程序尝试对消息反序列化时引发异常:  尝试对参数 http://tempuri.org/ 进行反序列化时出错: GetRechargeInfoListResponse.InnerException 消息是“反序列化对象 属于类型 ServiceReference.GetRechargeInfoListResponseBody 时出现错误.读取 XML 数据时,超出最大字符串内容长度配额 (8192).通过更改在创建 XML 读取器时所使用的 XmlDiction

XML序列化器读取XML数据

PS:标题我还真的不知道该怎么取比较好,大家将就下吧^_^ 场景:上周接到一个任务,要求我把ASP写的会员充值功能,用ASP.NET复制一遍,没有给我需求文档,就是让我根据代码去分析业务逻辑,然后看到一个IP识别功能,就是判断该会员卡是否可以在该IP段内使用,看着一大片的用if then 写的IP地址判断,我就蛋疼了.... 我就一直琢磨该怎么优化代码,开始用逗号去分割,然后把IP地址写在web.config中,但是太多了,然后请教同事,同事说可以用XML配置(web.config虽然也是XML

Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法

1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ (命名空间)进行反序列化时出错: InnerException 消息是“反序列化对象异常,读取 XML 数据时,超出最大字符串内容长度配额 (8192).通过更改在创建 XML 读取器时所使用的 XmlDictionaryRea

使用Java读取XML数据

---------------siwuxie095 工程名:ReadXML 包名:com.siwuxie095.xml 类名:ReadXML.java 打开资源管理器,在工程 ReadXML 文件夹下,放入 一个 XML 文件:languages.xml languages.xml 的内容: 工程结构目录如下: 代码: package com.siwuxie095.xml; import java.io.File; import java.io.IOException; import javax

读取xml数据装配到字典中之应用场景

前段时间看到支付宝设置里面有个多语言这个功能,蛮有意思的,就想双休没事的话做个相关的demo玩玩,可是礼拜六被妹子拽出去玩了一天,来大上海有大半年了,基本没有出去玩过,妹子说我是超级宅男,也不带她出去走走,妹子毕业后从大东北来到上海陪我一起打拼,想想蛮对不起她的.周六一天玩的很充实,走了很多路(一个星期的路都在这一天走完了),看了很多风景,回来洗个澡睡得很舒服,第二天也很清醒,其实除了写代码和玩游戏,发现双休出去走走真的挺不错的.附上几张图片,希望大家有时间多出去走走,也许有意外的收获啊! 星期

读取xml数据文件(转)

java里有个properties类  可以用它来读取XML文件   xml文件:  Xml代码 <?xml version="1.0" encoding="GB2312"?>  <RESULT>  <VALUE>  <NO>A1234</NO>  <ADDR>河南省郑州市</ADDR>  </VALUE>  <VALUE>  <NO>B1234&

PHP读取XML数据中CDATA内数值

// 在开发过程中遇到对XML获取时候加载 CDATA 无法读取内部的数值(例如微信平台的返回值) $content = simplexml_load_string('<content><![CDATA[Hello, world!]]></content>');echo (string) $content; $foo = simplexml_load_string('<foo><content><![CDATA[Hello, world!]

读取xml数据装配到字典中

1 public Dictionary<string, string> GetXml() 2 { 3 Dictionary<string, string> dic = new Dictionary<string, string>(); 4 string filePath = System.Web.HttpContext.Current.Server.MapPath(string.Concat("", "TestDemo.xml")

JAva使用DOM读取XML数据(解析)

原来一切都是有套路的 使用DOM解析XML文档步骤 1.创建解析器工厂对象 DocumentBuildFactory对象 2.由解析器工厂对象创建解析器对象,即DocumentBuilder对象 3.由解析器对象对指定XML文件进行解析,构建相应的DOM树,创建Document对象,生成一个Document对象 4.以Document对象为起点对DOM树的节点进行查询 5.使用Document的getElementsByTagName方法获取元素名称,生成一个NodeList集合, 6.遍历集合