简体   繁体   中英

Parsing XML with same parent and child node name

My partner provided me a SOAP web service that returns a XML in this format:

 <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>

This is what I got from his webservice, I think it's from PHP SOAP As you can see the parent node "item" identify an item "key" string with no value and its children show its information like id, date, Success, ... and its child

I tried to parse it on visual studio using but got the error xml nodes have the same name.

Please help me with a solution or demo code to get that "l3"'s children nodes from each child item in xsi:type="ns2:Map"

Try this

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();
        }

    }
}

Here is picture of results在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM