C# 读取XML的CDATA节点内容.

昨天读取了以下XML, 之前没有读取过类似的格式,用一种比较笨的方法读取的,记录下<?xml version="1.0"?>
<response>
<srvver>1.0</srvver>
<srvcode>000</srvcode>
<payload>
<param type="XML" key="data">
<![CDATA[
<Response>
  <Execution>
    <Status code="0" sql_code="0" description="执行成功!"/>
  </Execution>
  <ResponseContent>
    <Parameter/>
    <Document>
      <RecordSet id="1">
        <Master name="M" node_id="1">
          <Record>
            <Field name="MTRL_ID" value="51722500H031"/>
            <Field name="IS_MAIN" value="Y"/>
            <Field name="MAIN_ID" value="51722500H031"/>
            <Field name="DOSAGE" value="1.0"/>
            <Field name="NN_QTY" value="1000.0"/>
            <Field name="TN_QTY" value="1000.0"/>
            <Field name="SEQ" value="70.0"/>
            <Field name="POINT_STR" value=""/>
          </Record>
        </Master>
      </RecordSet>
      <RecordSet id="2">
        <Master name="M" node_id="2">
          <Record>
            <Field name="MTRL_ID" value="51820590H001"/>
            <Field name="IS_MAIN" value="N"/>
            <Field name="MAIN_ID" value="51820590H001"/>
            <Field name="DOSAGE" value="1.0"/>
            <Field name="NN_QTY" value="1000.0"/>
            <Field name="TN_QTY" value="500.0"/>
            <Field name="SEQ" value="30.0"/>
            <Field name="POINT_STR" value=""/>
          </Record>
        </Master>
      </RecordSet>
      <RecordSet id="3">
        <Master name="M" node_id="3">
          <Record>
            <Field name="MTRL_ID" value="51820710H002"/>
            <Field name="IS_MAIN" value="N"/>
            <Field name="MAIN_ID" value="51820510H002"/>
            <Field name="DOSAGE" value="0.0"/>
            <Field name="NN_QTY" value="0.0"/>
            <Field name="TN_QTY" value="1000.0"/>
            <Field name="SEQ" value="20.0"/>
            <Field name="POINT_STR" value=""/>
          </Record>
        </Master>
      </RecordSet>
    </Document>
  </ResponseContent>
</Response>
]]>
</param>
</payload>
</response>

以下是读取xml节点的过程

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

1.我先建立了一个类

 public class ReadXml
    {
        public string RecordSet;
        public string MTRL_ID;
        public string IS_MAIN;
        public string MAIN_ID;
        public string DOSAGE;
        public string NN_QTY;
        public string TN_QTY;
        public string SEQ;
        public string POINT_STR;
    }

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

XmlDocument doc = new XmlDocument();
            doc.LoadXml(strFile); var cdata = (XmlCDataSection)doc.SelectSingleNode("/response/payload/param/text()");

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

 XElement xe = XElement.Parse(cdata.InnerText);
 IEnumerable<XElement> elements = from ele in xe.Elements("ResponseContent").Elements("Document").Elements("RecordSet") select ele;
            List<ReadXml>  xmlNodeList = new List<ReadXml>();
            foreach (var ele in elements)
            {
                ReadXml xmlNode= new ReadXml();
                model.RecordSet = ele.Attribute("id").Value;

               var subeles = ele.Elements("Master").Elements("Record").Elements("Field");
                foreach (var item in subeles)
                {
                    if (item.Attribute("name").Value == "MTRL_ID")
                    {
                        xmlNode.MTRL_ID = item.Attribute("name").NextAttribute.Value;
                    }
                    if (item.Attribute("name").Value == "IS_MAIN")
                    {
                        xmlNode.IS_MAIN = item.Attribute("name").NextAttribute.Value;
                    }
                    if (item.Attribute("name").Value == "MAIN_ID")
                    {
                        xmlNode.MAIN_ID = item.Attribute("name").NextAttribute.Value;
                    }
                    if (item.Attribute("name").Value == "DOSAGE")
                    {
                        xmlNode.DOSAGE = item.Attribute("name").NextAttribute.Value;
                    }
                    if (item.Attribute("name").Value == "NN_QTY")
                    {
                        xmlNode.NN_QTY = item.Attribute("name").NextAttribute.Value;
                    }
                    if (item.Attribute("name").Value == "TN_QTY")
                    {
                        xmlNode.TN_QTY = item.Attribute("name").NextAttribute.Value;
                    }
                    if (item.Attribute("name").Value == "SEQ")
                    {
                        xmlNode.SEQ = item.Attribute("name").NextAttribute.Value;
                    }
                    if (item.Attribute("name").Value == "POINT_STR")
                    {
                        xmlNode.POINT_STR=item.Attribute("name").NextAttribute.Value;
                    }
                }
                xmlNodeList.Add(xmlNode);
            }

可以, 应该有更好的方法去读取, 这里是用比较笨的方法去实现了这个xml的读取.

原文地址:https://www.cnblogs.com/twostare/p/11452361.html

时间: 2025-01-11 13:19:14

C# 读取XML的CDATA节点内容.的相关文章

读取xml并将节点保存到Excal

using NPOI.HPSF; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using Sy

读取XML某一节点

先看XML文档: <?xml version="1.0" encoding="utf-8" ?> <NewDataSet> <Table> <id>000_bt_001</id> <message>クリア</message> </Table> <Table> <id>000_bt_002</id> <message>レンジ&

读取XML某一个节点 条件筛选

<?xml version="1.0" encoding="utf-8" ?> - <area Country="China"> - <province ID="1" provinceID="110000" province="北京市"> - <City CityID="110100" City="市辖区"

java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = DocumentHelper.parseText(xmlStr); // XML转字符串 Document document = ...; String text = document.asXML(); //这里的XML DOCUMENT为org.dom4j.Document 二.读取XML文档节点: pack

C#中读取xml文件指定节点

目录(?)[-] XmlDocumentSelectSingleNode方法的使用 XmlDocumentSelectNodes方法的使用 通过节点属性查找指定节点 参考:Select XML Nodes by Name 假设xml文件内容是 [c-sharp] view plaincopyprint? <?xml version="1.0" encoding="utf-8"?> <Workflow> <Activity> <

.net中读取xml文件中节点的所有属性信息

功能描述: 将数据以xml的格式记录成配置文件,需要获取配置文件中的数据时,则获取对应的配置文件,读取配置文件里对应节点的所有属性. 逻辑实现: 1.将数据配置好在xml文件中. 2.获取xml文件中所有对应的节点. 3.遍历每个节点,获取该节点所有的属性值. 4.将属性值赋到设计的节点类中. 具体实现: 实现效果

Java获取XML节点总结之读取XML文档节点

dom4j是Java的XML API,用来读写XML文件的.目前有很多场景中使用dom4j来读写xml的.要使用dom4j开发,需要下载导入dom4j相应的jar文件.官网下载:http://www.dom4j.org/dom4j-1.6.1/github下载:http://dom4j.github.io/下载解压之后如图所示: 我们只需要把dom4j-1.6.1.jar文件构建到我们开发项目中就可以了. 下面就以Eclipse创建java项目的构建方法为例说明:声明:本Java项目的开发环境J

c#读取XML多级子节点

string xmlFilePath = "D:\\log_xml\\MarInfo.xml"; //Server.MapPath(@"相对路径如/xml/test.xml"); XmlDocument doc = new XmlDocument(); doc.Load(xmlFilePath);//加载XML文件 string rst = ""; //使用xpath表达式选择文档中所有的student子节点 XmlNodeList studen

DataSet - DataTable - DataRow 读取 xml 文件 + 搜索

DataSet ds = XmlHelper.GetDataSetByXml(AppDomain.CurrentDomain.BaseDirectory + "/Config/ConfigName.xml");//取得xml文件 DataTable dt = ds.Tables["table_Name"];//取得xml文件的节点内容 DataRow[] dr = dr = ds.Tables["table_Name"].Select("