C# 解析具有相同父节点和子节点名称的XML
我的合作伙伴为我提供了一个SOAP web服务,该服务返回以下格式的XML:C# 解析具有相同父节点和子节点名称的XML,c#,xml,web-services,soap,C#,Xml,Web Services,Soap,我的合作伙伴为我提供了一个SOAP web服务,该服务返回以下格式的XML: <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:RestControllerwsdl" xmlns:xsi="http://www.w3.or
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:RestControllerwsdl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getInfoResponse>
<return xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">l3</key>
<value SOAP-ENC:arrayType="ns2:Map[10]" xsi:type="SOAP-ENC:Array">
<item xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">id</key>
<value xsi:type="xsd:string">2815</value>
</item>
<item>
<key xsi:type="xsd:string">date</key>
<value xsi:type="xsd:string">2015-06-10 00:00:14</value>
</item>
<item>
<key xsi:type="xsd:string">Success</key>
<value xsi:type="xsd:string">0</value>
</item>
<item>
<key xsi:type="xsd:string">Failed</key>
<value xsi:type="xsd:string">0</value>
</item>
<item>
<key xsi:type="xsd:string">Cancel</key>
<value xsi:type="xsd:string">4</value>
</item>
<item>
<key xsi:type="xsd:string">Error</key>
<value xsi:type="xsd:string">932</value>
</item>
<item>
<key xsi:type="xsd:string">Active</key>
<value xsi:type="xsd:string">2644</value>
</item>
<item>
<key xsi:type="xsd:string">Total</key>
<value xsi:type="xsd:string">3618</value>
</item>
<item>
<key xsi:type="xsd:string">Summary</key>
<value xsi:type="xsd:string">1864000</value>
</item>
<item>
<key xsi:type="xsd:string">CustomerID</key>
<value xsi:type="xsd:string">4</value>
</item>
</item>
<item xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">id</key>
<value xsi:type="xsd:string">2805</value>
</item>
<item>
<key xsi:type="xsd:string">date</key>
<value xsi:type="xsd:string">2015-06-09 00:00:30</value>
</item>
<item>
<key xsi:type="xsd:string">Success</key>
<value xsi:type="xsd:string">0</value>
</item>
<item>
<key xsi:type="xsd:string">Failed</key>
<value xsi:type="xsd:string">0</value>
</item>
<item>
<key xsi:type="xsd:string">Cancel</key>
<value xsi:type="xsd:string">11</value>
</item>
<item>
<key xsi:type="xsd:string">Error</key>
<value xsi:type="xsd:string">1294</value>
</item>
<item>
<key xsi:type="xsd:string">Active</key>
<value xsi:type="xsd:string">7321</value>
</item>
<item>
<key xsi:type="xsd:string">Total</key>
<value xsi:type="xsd:string">3622</value>
</item>
<item>
<key xsi:type="xsd:string">Summary</key>
<value xsi:type="xsd:string">2588000</value>
</item>
<item>
<key xsi:type="xsd:string">CustomerID</key>
<value xsi:type="xsd:string">4</value>
</item>
</item>
</value>
</item>
</return>
</ns1:getInfoResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
l3
身份证件
2815
日期
2015-06-10 00:00:14
成功
0
失败
0
取消
4.
错误
932
活跃的
2644
全部的
3618
总结
1864000
客户编号
4.
身份证件
2805
日期
2015-06-09 00:00:30
成功
0
失败
0
取消
11
错误
1294
活跃的
7321
全部的
3622
总结
2588000
客户编号
4.
这是我从他的Web服务中得到的,我想是从PHP SOAP中得到的
正如您所看到的,父节点“item”标识一个没有值的item“key”字符串,其子节点显示id、日期、成功等信息。。。
和它的孩子
我尝试在VisualStudio上使用解析它,但遇到错误xml节点具有相同的名称
请帮助我提供一个解决方案或演示代码,以便从xsi:type=“ns2:Map”中的每个子项中获取“l3”的子节点
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;
namespace ConsoleApplication33
{
class Program
{
static void Main(string[] args)
{
string input =
"<SOAP-ENV:Envelope SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns1=\"urn:RestControllerwsdl\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:ns2=\"http://xml.apache.org/xml-soap\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<SOAP-ENV:Body>" +
"<ns1:getInfoResponse>" +
"<return xsi:type=\"ns2:Map\">" +
"<item>" +
"<key xsi:type=\"xsd:string\">l3</key>" +
"<value SOAP-ENC:arrayType=\"ns2:Map[10]\" xsi:type=\"SOAP-ENC:Array\">" +
"<item xsi:type=\"ns2:Map\">" +
"<item>" +
"<key xsi:type=\"xsd:string\">id</key>" +
"<value xsi:type=\"xsd:string\">2815</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">date</key>" +
"<value xsi:type=\"xsd:string\">2015-06-10 00:00:14</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Success</key>" +
"<value xsi:type=\"xsd:string\">0</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Failed</key>" +
"<value xsi:type=\"xsd:string\">0</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Cancel</key>" +
"<value xsi:type=\"xsd:string\">4</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Error</key>" +
"<value xsi:type=\"xsd:string\">932</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Active</key>" +
"<value xsi:type=\"xsd:string\">2644</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Total</key>" +
"<value xsi:type=\"xsd:string\">3618</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Summary</key>" +
"<value xsi:type=\"xsd:string\">1864000</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">CustomerID</key>" +
"<value xsi:type=\"xsd:string\">4</value>" +
"</item>" +
"</item>" +
"<item xsi:type=\"ns2:Map\">" +
"<item>" +
"<key xsi:type=\"xsd:string\">id</key>" +
"<value xsi:type=\"xsd:string\">2805</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">date</key>" +
"<value xsi:type=\"xsd:string\">2015-06-09 00:00:30</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Success</key>" +
"<value xsi:type=\"xsd:string\">0</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Failed</key>" +
"<value xsi:type=\"xsd:string\">0</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Cancel</key>" +
"<value xsi:type=\"xsd:string\">11</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Error</key>" +
"<value xsi:type=\"xsd:string\">1294</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Active</key>" +
"<value xsi:type=\"xsd:string\">7321</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Total</key>" +
"<value xsi:type=\"xsd:string\">3622</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">Summary</key>" +
"<value xsi:type=\"xsd:string\">2588000</value>" +
"</item>" +
"<item>" +
"<key xsi:type=\"xsd:string\">CustomerID</key>" +
"<value xsi:type=\"xsd:string\">4</value>" +
"</item>" +
"</item>" +
"</value>" +
"</item>" +
"</return>" +
"</ns1:getInfoResponse>" +
"</SOAP-ENV:Body>" +
"</SOAP-ENV:Envelope>";
XDocument doc = XDocument.Parse(input);
XElement value = doc.Descendants("value").FirstOrDefault();
var items = value.Elements("item")
.Select(x => x.Elements("item").Select(y => new { key = y.Element("key").Value, value = y.Element("value").Value})
.ToList()).ToList();
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Linq;
使用System.IO;
命名空间控制台应用程序33
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串输入=
"" +
"" +
"" +
"" +
"" +
“l3”+
"" +
"" +
"" +
“id”+
"2815" +
"" +
"" +
“日期”+
"2015-06-10 00:00:14" +
"" +
"" +
“成功”+
"0" +
"" +
"" +
“失败”+
"0" +
"" +
"" +
“取消”+
"4" +
"" +
"" +
“错误”+
"932" +
"" +
"" +
“活动”+
"2644" +
"" +
"" +
“总计”+
"3618" +
"" +
"" +
“摘要”+
"1864000" +
"" +
"" +
“客户ID”+
"4" +
"" +
"" +
"" +
"" +
“id”+
"2805" +
"" +
"" +
“日期”+
"2015-06-09 00:00:30" +
"" +
"" +
“成功”+
"0" +
"" +
"" +
“失败”+
"0" +
"" +
"" +
“取消”+
"11" +