解析xml

weimei521 2018-06-20 02:32:05
<?xml version=”1.0” encoding=” gbk”?>
<Pay>
<response>
<Header>
<funid> YLPAY.01.01.01</funid>
<sign>0000000000000000 </sign>
<result>0</result>
<errmsg></errmsg>
</Header>
<Body>
<amount>100</amount>
<pos_serial>123123123</pos_serial>
<pos_trade_date>2018-06-20</pos_trade_date>
</Body>
</ response >
</Pay>
自己写的方法如下:
XmlDocument xd = new XmlDocument();
xd.LoadXml(XML);
XmlNamespaceManager xnm = new XmlNamespaceManager(xd.NameTable);
XmlNodeList xnl = xd.SelectNodes("/pay/response/Body", xnm);
foreach (XmlElement xe in xnl)
{
//获取节点数据
}
但是这样就属于如果要解析很多,不能写一个公用的方法,请教大神有没有公用的方法
...全文
204 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
直接操作xml本来就是定制性比较强的东东,不管是原生的xmldoc方式,还是linq2xml方式 但反序列化说白了只是提取了将xml转化成实体这个过程,你获取/pay/response/Body的过程仍然要写成 entity.Response.Body,对于其他xml,你可能就要写成xxx.YYY,这种虽然写法上干净明了,但额外的你需要多定义相应的实体类 所以如果不是需要将xml进行传递,只是需要解析的话,个人建议还是用linq2xml的方式
  • 打赏
  • 举报
回复
Linq to XML 这可能是更快更好的选择
大鱼> 2018-06-20
  • 打赏
  • 举报
回复
xml反序列化
wanghui0380 2018-06-20
  • 打赏
  • 举报
回复
复制
<?xml version="1.0" encoding="gbk"?> 
<Pay>     
  <response>   
      <Header>    
         <funid> YLPAY.01.01.01</funid>       
         <sign>0000000000000000 </sign>        
         <result>0</result>    
         <errmsg></errmsg>   
         </Header>   
      <Body> 
         <amount>100</amount>
         <pos_serial>123123123</pos_serial>
          <pos_trade_date>2018-06-20</pos_trade_date>
     </Body>  
    </response >
 </Pay> 
在vs里编辑--选择性粘贴--把xml粘贴为类 结果是
/// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public partial class Pay
    {

        private PayResponse responseField;

        /// <remarks/>
        public PayResponse response
        {
            get
            {
                return this.responseField;
            }
            set
            {
                this.responseField = value;
            }
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class PayResponse
    {

        private PayResponseHeader headerField;

        private PayResponseBody bodyField;

        /// <remarks/>
        public PayResponseHeader Header
        {
            get
            {
                return this.headerField;
            }
            set
            {
                this.headerField = value;
            }
        }

        /// <remarks/>
        public PayResponseBody Body
        {
            get
            {
                return this.bodyField;
            }
            set
            {
                this.bodyField = value;
            }
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class PayResponseHeader
    {

        private string funidField;

        private byte signField;

        private byte resultField;

        private object errmsgField;

        /// <remarks/>
        public string funid
        {
            get
            {
                return this.funidField;
            }
            set
            {
                this.funidField = value;
            }
        }

        /// <remarks/>
        public byte sign
        {
            get
            {
                return this.signField;
            }
            set
            {
                this.signField = value;
            }
        }

        /// <remarks/>
        public byte result
        {
            get
            {
                return this.resultField;
            }
            set
            {
                this.resultField = value;
            }
        }

        /// <remarks/>
        public object errmsg
        {
            get
            {
                return this.errmsgField;
            }
            set
            {
                this.errmsgField = value;
            }
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class PayResponseBody
    {

        private byte amountField;

        private uint pos_serialField;

        private System.DateTime pos_trade_dateField;

        /// <remarks/>
        public byte amount
        {
            get
            {
                return this.amountField;
            }
            set
            {
                this.amountField = value;
            }
        }

        /// <remarks/>
        public uint pos_serial
        {
            get
            {
                return this.pos_serialField;
            }
            set
            {
                this.pos_serialField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(DataType = "date")]
        public System.DateTime pos_trade_date
        {
            get
            {
                return this.pos_trade_dateField;
            }
            set
            {
                this.pos_trade_dateField = value;
            }
        }
    }
在去百度标准的“C# xml反序列化对象”就好。剩下的事情只是反序列化他,然后他就是一个Pay对象,你按对象访问就行

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧