Reputation: 39
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
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
Upvotes: 1