c#使用XmlDocument解析xml文件

发布时间 2023-11-08 11:05:38作者: 冥天笑

1、示例xml文件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <soap:Envelope
 3     xmlns:xsi="http://ww.w3.org/2001/XMLSchema-instance"
 4     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 5     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 6     <soap:Body>
 7         <DataListResponse
 8             xmlns="http://tempuri.org/">
 9             <DataResultGet>
10                 <RData>
11                     <Timestamp>2000-01-01T00:00:00Z</Timestamp>
12                     <Type>r4</Type>
13                     <Quality>Normal</Quality>
14                     <Tag>C_TEST_FLAG1</Tag>
15                     <Value>
16                         <time>0001-01-01T00:00:00</time>
17                         <r4>4</r4>
18                         <r8>1</r8>
19                     </Value>
20                 </RData>
21                 <RData>
22                     <Timestamp>2023-01-01T00:00:00</Timestamp>
23                     <Type>r4</Type>
24                     <Quality>Normal</Quality>
25                     <Tag>C_TEST_FLAG2</Tag>
26                     <Value>
27                         <time>2023-01-01T00:00:00</time>
28                         <r4>41313123</r4>
29                         <r8>11233</r8>
30                     </Value>
31                 </RData>
32             </DataResultGet>
33         </DataListResponse>
34     </soap:Body>
35 </soap:Envelope>

2、数据组装

 1         public static string SendDataFun()
 2         {
 3             XmlDocument xmlResponsetDataDoc = new XmlDocument();
 4             // 创建头部声明信息 <?xml version="1.0" encoding="utf-8"?>
 5             XmlDeclaration xmlDoc = xmlResponsetDataDoc.CreateXmlDeclaration("1.0", "utf-8", null);
 6             xmlResponsetDataDoc.AppendChild(xmlDoc);
 7 
 8             //新建根节点
 9             XmlElement soapRootItem = xmlResponsetDataDoc.CreateElement("Envelope");//soap:Envelope
10             soapRootItem.SetAttribute("xmlns:xsi", "http://ww.w3.org/2001/XMLSchema-instance");
11             soapRootItem.SetAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
12             soapRootItem.SetAttribute("xmlns:soap", "http://schemas.xmlsoap.org/soap/envelope/");
13             xmlResponsetDataDoc.AppendChild(soapRootItem);
14             //新建body节点
15             XmlElement soapBodyRootItem = xmlResponsetDataDoc.CreateElement("Body");//soap:Body
16             soapRootItem.AppendChild(soapBodyRootItem);
17 
18             //新建DataListResponse 节点
19             XmlElement soapDataListResponse = xmlResponsetDataDoc.CreateElement("DataListResponse");
20             soapDataListResponse.SetAttribute("xmlns", "http://tempuri.org/");
21             soapBodyRootItem.AppendChild(soapDataListResponse);
22             //新建DataResultGet节点
23             XmlElement soapDataListResult = xmlResponsetDataDoc.CreateElement("DataResultGet");
24             soapDataListResponse.AppendChild(soapDataListResult);
25             //新建RData节点
26             XmlElement soapRData = xmlResponsetDataDoc.CreateElement("RData");
27             soapDataListResult.AppendChild(soapRData);
28             //新建RData节点下数据
29             XmlElement soapTimestamp = xmlResponsetDataDoc.CreateElement("Timestamp");
30             soapTimestamp.InnerText = "2000-01-01T00:00:00Z";
31             soapRData.AppendChild(soapTimestamp);
32             XmlElement soapType = xmlResponsetDataDoc.CreateElement("Type");
33             soapType.InnerText = "r4";
34             soapRData.AppendChild(soapType);
35             XmlElement soapQuality = xmlResponsetDataDoc.CreateElement("Quality");
36             soapQuality.InnerText = "Bad";
37             soapRData.AppendChild(soapQuality);
38             XmlElement soapTag = xmlResponsetDataDoc.CreateElement("Tag");
39             soapTag.InnerText = "C_TEST_FLAG1";
40             soapRData.AppendChild(soapTag);
41             //新建RData下value节点
42             XmlElement soapValue = xmlResponsetDataDoc.CreateElement("Value");
43             soapRData.AppendChild(soapValue);
44             //新建value节点数据
45             XmlElement soaptime = xmlResponsetDataDoc.CreateElement("time");
46             soaptime.InnerText = "0001-01-01T00:00:00";
47             soapValue.AppendChild(soaptime);
48             XmlElement soapr4 = xmlResponsetDataDoc.CreateElement("r4");
49             soapr4.InnerText = "4";
50             soapValue.AppendChild(soapr4);
51             XmlElement soapr8 = xmlResponsetDataDoc.CreateElement("r8");
52             soapr8.InnerText = "1";
53             soapValue.AppendChild(soapr8);
54 
55             //组装第二个RData2节点
56             XmlElement soapRData2 = xmlResponsetDataDoc.CreateElement("RData");
57             soapDataListResult.AppendChild(soapRData2);
58             //新建RData2节点下数据
59             XmlElement soapTimestamp2 = xmlResponsetDataDoc.CreateElement("Timestamp");
60             soapTimestamp2.InnerText = "2023-01-01T00:00:00";
61             soapRData2.AppendChild(soapTimestamp2);
62             XmlElement soapType2 = xmlResponsetDataDoc.CreateElement("Type");
63             soapType2.InnerText = "r4";
64             soapRData2.AppendChild(soapType2);
65             XmlElement soapQuality2 = xmlResponsetDataDoc.CreateElement("Quality");
66             soapQuality2.InnerText = "Bad";
67             soapRData2.AppendChild(soapQuality2);
68             XmlElement soapTag2 = xmlResponsetDataDoc.CreateElement("Tag");
69             soapTag2.InnerText = "C_TEST_FLAG2";
70             soapRData2.AppendChild(soapTag2);
71             //新建RData下value节点
72             XmlElement soapValue2 = xmlResponsetDataDoc.CreateElement("Value");
73             soapRData2.AppendChild(soapValue2);
74             //新建value节点数据
75             XmlElement soaptime2 = xmlResponsetDataDoc.CreateElement("time");
76             soaptime2.InnerText = "2023-01-01T00:00:00";
77             soapValue2.AppendChild(soaptime2);
78             XmlElement soapr42 = xmlResponsetDataDoc.CreateElement("r4");
79             soapr42.InnerText = "41313123";
80             soapValue2.AppendChild(soapr42);
81             XmlElement soapr82 = xmlResponsetDataDoc.CreateElement("r8");
82             soapr82.InnerText = "11233";
83             soapValue2.AppendChild(soapr82);
84 
85             //xml转字符串
86             string strXmlData = xmlResponsetDataDoc.OuterXml;
87             strXmlData = strXmlData.Replace("Envelope", "soap:Envelope");//如果可以自行组装域进去此处就不用替换
88             strXmlData = strXmlData.Replace("Body", "soap:Body");
89 
90             return strXmlData;
91         }

3、数据解析

 1         public static void RecvDataFun(string strRecvData)
 2         {
 3             //数据解析
 4             XmlDocument xmlRecvtDataDoc = new XmlDocument();
 5             xmlRecvtDataDoc.LoadXml(strRecvData);
 6             var nodeListData = xmlRecvtDataDoc.GetElementsByTagName("RData");
 7             //遍历输出
 8             foreach (XmlElement node in nodeListData)
 9             {
10                 string strRDataType = node.GetElementsByTagName("Type")[0].InnerText;
11                 string strRDataTag = node.GetElementsByTagName("Tag")[0].InnerText;
12                 if(strRDataType != "None")
13                 {
14                     var nodeListValue = node.GetElementsByTagName("Value");
15                     int nNum = nodeListValue.Count;
16                     foreach (XmlElement nodeValue in nodeListValue)
17                     {
18                         string strValue = nodeValue.GetElementsByTagName(strRDataType)[0].InnerText;
19                     }
20                 }
21             }
22         }