解析带有命名空间的xml,并实例化

  /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T">要反射的类名称 CLASS</typeparam>
        /// <param name="xml">要解析的XML</param>
        /// <param name="subNode">解析的路径</param>
        /// <param name="cordysnamespace">XML中带有的命名空间命名空间数组0为命名空间名称数组1为命名空间值</param>
        /// <returns>返回实体类的集合</returns>
        public static T XmlToObj<T>(string xml, string subNode, string[] cordysnamespace) where T : new()
        {
            //XmlDocument装载xml内容
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);
         
            //命名空间管理器,把依次要访问的结点的所有父命结点名空间
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
            nsmgr.AddNamespace("SOAP", "http://schemas.xmlsoap.org/soap/envelope/"); //有命名空间名称的直接添加
            nsmgr.AddNamespace("cordys", "http://schemas.cordys.com/USER_INFO"); //没有命名空间名称的任意指定一个,但是该名称需要与xpath中字符相同。

            XmlNode node = doc.SelectSingleNode(subNode, nsmgr);//使用SelectSingleNode方法选择结点
          
            //使用反射转换成实体         
            T entity = new T(); 
            Type objtype = typeof(T);
            PropertyInfo[] propinfos  = objtype.GetProperties();
          
            //填充entity类的属性
            foreach (PropertyInfo propinfo in propinfos)
            {
                string v = node.SelectSingleNode("", nsmgr).InnerText;
                if (v != null)
                {
                    propinfo.SetValue(entity, Convert.ChangeType(v, propinfo.PropertyType), null);
                }
                      return entity;
        }

 

参数补充说明:

xml内容------------------------------------------------

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
 <SOAP:Header xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
 ....
 </SOAP:Header>
 <SOAP:Body>
  <getUserInfoByAccountResponse xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://schemas.cordys.com/USER_INFO">
   <tuple>
    <USER_INFO>
     <USER_ID>777</USER_ID>
     <ERPID>0</ERPID>>
     <POSITION>项目经理</POSITION> 
    </USER_INFO>  
   </tuple>
  </getUserInfoByAccountResponse>
 </SOAP:Body>
</SOAP:Envelope>

 

T-------------------------------------------

UserInfo

 

UserInfo的定义

public  class UserInfo
   
        public string USER_ID { get; set; }       
        public string ERPID { set; get; }    
        public string POSITION { set; get; }    
    }

 

subNode-------------------------------------------

"SOAP:Envelope/SOAP:Body/cordys:getUserInfoByAccountResponse/cordys:tuple/cordys:USER_INFO"

 

cordysnamespace------------------------------------

string[] cordysnamespace=new string[2]{"cordys", "http://schemas.cordys.com/USER_INFO"}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值