正则表达-匹配xml

 1、xml字符串,包括换行、空格等等

<?xml version="1.0" encoding="UTF-8"?>
<bocb2e version="120" locale="zh_CN"> 
  <head> 
    <termid>E059151012181</termid>  
    <trnid>170420180606</trnid>  
    <custid>133811631</custid>  
    <cusopr>136138299</cusopr>  
    <trncod>b2e0077</trncod> 
  </head>  
  <trans> 
    <trn-b2e0077-rs>
      <status>
        <rspcod>1033</rspcod>
        <rspmsg>前置机未向服务器签到[null]</rspmsg>
      </status>
    </trn-b2e0077-rs>
  </trans> 
</bocb2e>

 2、Regex正则:

(\\s|\\n)*表示多个空白符、换行,匹配中间的所有(.|\\s|\n)*除换行符的任意字符、空白符和换行符
string result = req.Exec();
            //Regex regexStatus = new Regex("<status>(?<st>[^<\\/status>]?)", RegexOptions.IgnoreCase | RegexOptions.Multiline);
            Regex regexStatus = new Regex("<trn-b2e0077-rs>(\\s|\\n)*(?<st><status>(.|\\s|\n)*</status>)(\\s|\n)*</trn-b2e0077-rs>", RegexOptions.IgnoreCase | RegexOptions.Multiline);
            //Regex regexStatus = new Regex("<trn-b2e0077-rs>(\\s|\\n)*<status>(?<st>(.|\\s|\n)*)</status>(\\s|\n)*</trn-b2e0077-rs>", RegexOptions.IgnoreCase | RegexOptions.Multiline);
            if (regexStatus.IsMatch(result))
            {
                MatchCollection matchs = regexStatus.Matches(result);
                foreach (Match match in matchs)
                {
                    string status = match.Groups["st"].ToString().Replace(" ", "");
                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(status);
                    string json= Newtonsoft.Json.JsonConvert.SerializeXmlNode(doc);//KLB.Common.Serializer.ConvertXmlToObject<AccountBillRS>(result);
                    //Type t = typeof(StatusCode);
                    //var entity = Activator.CreateInstance(t);

                    var obj= Newtonsoft.Json.JsonConvert.DeserializeObject<AccountBillRS>(json);//KLB.Common.Serializer.ConvertXmlToObject<AccountBillRS>(result);
                }
            }

 3、匹配得到的结果

<status>
<rspcod>1033</rspcod>
<rspmsg>前置机未向服务器签到[null]</rspmsg>
</status>

 4、类

public class BOCB2ERS
    {
        public StatusCode status { get; set; }
    }
    public class StatusCode
    {
        public string rspcod { get; set; }

        public string rspmsg { get; set; }
    }

[XmlRoot("trnb2e0077-rs")]
    [Serializable]
    public class AccountBillRS:BOCB2ERS
    {
        /// <summary>
        /// 总笔数
        /// </summary>
        //public int totalnum { get; set; }
        //[XmlElement("b2e0077-rs")]
        //public AccountBillRSBody AccountBillBody { get; set; }
    }

 

posted @ 2017-04-20 18:08  wjl910  阅读(1731)  评论(0)    收藏  举报