c#读取XML的CDATA节点内容实例详解

  

首先看实例代码:

        昨天读取了以下XML,之前没有读取过类似的格式,用一种比较笨的方法读取的,记录下   & lt; & # 63; xml version=" 1.0 " & # 63;比;   & lt; response>   & lt; srvver> 1.0 & lt;/srvver>   & lt; srvcode> 000 & lt;/srvcode>   & lt; payload>   & lt;参数类型=癤ML”键=笆荨北?   & lt; ! [CDATA [   & lt; Response>   & lt; Execution>   & lt;状态代码=" 0 " sql_code=" 0 "描述=爸葱谐晒?”/比;   & lt;/Execution>   & lt; ResponseContent>   & lt;参数/比;   & lt; Document>   & lt;记录集id=?”比;   & lt;主名称=癕”node_id=?”比;   & lt; Record>   & lt;字段名=" MTRL_ID " value=" https://www.yisu.com/zixun/51722500H031 "/比;   & lt;字段名=" IS_MAIN " value=" https://www.yisu.com/zixun/Y "/比;   & lt;字段名=" MAIN_ID " value=" https://www.yisu.com/zixun/51722500H031 "/比;   & lt;字段名称==" https://www.yisu.com/zixun/1.0 "/凹亮俊奔壑当?   & lt;字段名=" NN_QTY " value=" https://www.yisu.com/zixun/1000.0 "/比;   & lt;字段名=" TN_QTY " value=" https://www.yisu.com/zixun/1000.0 "/比;   & lt;字段名=" SEQ " value=" https://www.yisu.com/zixun/70.0 "/比;   & lt;字段名=" POINT_STR " value="/比;   & lt;/Record>   & lt;/Master>   & lt;/RecordSet>   & lt;记录集id=?”比;   & lt;主名称=癕”node_id=?”比;   & lt; Record>   & lt;字段名=" MTRL_ID " value=" https://www.yisu.com/zixun/51820590H001 "/比;   & lt;字段名=" IS_MAIN " value=" https://www.yisu.com/zixun/N "/比;   & lt;字段名=" MAIN_ID " value=" https://www.yisu.com/zixun/51820590H001 "/比;   & lt;字段名称==" https://www.yisu.com/zixun/1.0 "/凹亮俊奔壑当?   & lt;字段名=" NN_QTY " value=" https://www.yisu.com/zixun/1000.0 "/比;   & lt;字段名=" TN_QTY " value=" https://www.yisu.com/zixun/500.0 "/比;   & lt;字段名=" SEQ " value=" https://www.yisu.com/zixun/30.0 "/比;   & lt;字段名=" POINT_STR " value="/比;   & lt;/Record>   & lt;/Master>   & lt;/RecordSet>   & lt;记录集id=?”比;   & lt;主名称=癕”node_id=?”比;   & lt; Record>   & lt;字段名=" MTRL_ID " value=" https://www.yisu.com/zixun/51820710H002 "/比;   & lt;字段名=" IS_MAIN " value=" https://www.yisu.com/zixun/N "/比;   & lt;字段名=" MAIN_ID " value=" https://www.yisu.com/zixun/51820510H002 "/比;   & lt;字段名称==" https://www.yisu.com/zixun/0.0 "/凹亮俊奔壑当?   & lt;字段名=" NN_QTY " value=" https://www.yisu.com/zixun/0.0 "/比;   & lt;字段名=" TN_QTY " value=" https://www.yisu.com/zixun/1000.0 "/比;   & lt;字段名=" SEQ " value=" https://www.yisu.com/zixun/20.0 "/比;   & lt;字段名=" POINT_STR " value="/比;   & lt;/Record>   & lt;/Master>   & lt;/RecordSet>   & lt;/Document>   & lt;/ResponseContent>   & lt;/Response>   ]]比;   & lt;/param>   & lt;/payload>   & lt;/response>      

以下是读xml节取点的过程

  

我的目的是想要读取CDATA里面的& lt; RecordSet> & lt;/RecordSet>包裹的数据

  

1。我先建立了一个类

        公开课ReadXml   {   公共字符串记录集;   公共字符串MTRL_ID;   公共字符串IS_MAIN;   公共字符串MAIN_ID;   公共字符串剂量;   公共字符串NN_QTY;   公共字符串TN_QTY;   公共字符串SEQ;   公共字符串POINT_STR;   }      

2。接着我把CDATA里面的内容提出来

        XmlDocument doc=new XmlDocument ();   doc.LoadXml (strFile);var cdata=https://www.yisu.com/zixun/(XmlCDataSection) doc.SelectSingleNode(“/响应/负载/参数/text ()”);      

3。然后用XElement的Linq方法找到记录集节点集合,循环节点集合,赋值,以下是实现代码:

        XElement xe=XElement.Parse (cdata.InnerText);   IEnumerable元素=从xe.Elements避署(“ResponseContent”) . elements(“文档”). elements(记录集)选择避署;   ListxmlNodeList=new List ();   foreach (var避署的元素)   {   ReadXml xmlNode=new ReadXml ();   模型。记录集=ele.Attribute value (" id ");      var subeles=ele.Elements(“大师”). elements(“记录”). elements(“场”);   foreach (var subeles项)   {   如果(item.Attribute(“名字”)。值=https://www.yisu.com/zixun/=癕TRL_ID”)   {   xmlNode。.NextAttribute.Value MTRL_ID=item.Attribute (" name ");   }   如果(item.Attribute(“名字”)。值=https://www.yisu.com/zixun/=癐S_MAIN”)   {   xmlNode。.NextAttribute.Value IS_MAIN=item.Attribute (" name ");   }   如果(item.Attribute(“名字”)。值=https://www.yisu.com/zixun/=癕AIN_ID”)   {   xmlNode。.NextAttribute.Value MAIN_ID=item.Attribute (" name ");   }   如果(item.Attribute(“名字”)。值=https://www.yisu.com/zixun/=凹亮俊?   {   xmlNode。剂量=item.Attribute .NextAttribute.Value(“名字”);   }   如果(item.Attribute(“名字”)。值=https://www.yisu.com/zixun/=癗N_QTY”)   {   xmlNode。.NextAttribute.Value NN_QTY=item.Attribute (" name ");   }   如果(item.Attribute(“名字”)。值=https://www.yisu.com/zixun/=癟N_QTY”)   {   xmlNode。.NextAttribute.Value TN_QTY=item.Attribute (" name ");   }   如果(item.Attribute(“名字”)。值=https://www.yisu.com/zixun/=SEQ)   {   xmlNode。SEQ=item.Attribute .NextAttribute.Value(“名字”);   }   如果(item.Attribute(“名字”)。值=https://www.yisu.com/zixun/=癙OINT_STR”)   {   .NextAttribute.Value xmlNode.POINT_STR=item.Attribute (" name ");   }   }   xmlNodeList.Add (xmlNode);   }

c#读取XML的CDATA节点内容实例详解