Ann Ann
Ann Ann

Reputation: 39

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"

Upvotes: 2

Views: 668

Answers (1)

jdweng
jdweng

Reputation: 34419

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 enter image description here

Upvotes: 1

Related Questions