What do you do when a server returns to you an XML string? How do you parse or query this string? There are 2 main ways that you can solve this problem. Using XDocoument or using XElement.
1. The XDocument way
1.1 To Load the string
private XDocument GetXDocument(string xmlString)
{
return XDocument.Load(new System.IO.StringReader(xmlString));
}
1.2 To Parse or query the string
XDocument doc = GetXDocument(temp);
IEnumerable<string> textProtocols =
from mail in doc.Root.Descendants("EMail")
select (string)mail;
2. The XElement Way
I am going to combine Loading and Parsing into one function for brevity purposes
public static List<string> GetElements(string xmlString, string descendant)
{
List<string> ret = new List<string>();
TextReader sr = new StringReader(result);
XElement xmlTree = XElement.Load(sr);
sr.Close();
IEnumerable<XElement> items =
from el in xmlTree.Descendants(descendant)
select el;
foreach (XElement elt in items)
{
ret.Add((string)elt);
}
return ret;
}
Missing Name Space
Sometimes you may get a XML string with missing namespaces. The easiest way to resolve this is to you string replace.
XML
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelop"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body>
<m:Password>
Password
</m:Password>
</soap:Body>
</soap:Envelope
Code
// Resolve missing Namespace
string result = xmlString.Replace("m:", string.Empty);
Alternative solution to missing namespaces
I have found out the Load method of XDocument allows you to load files with missing namespace. You can save the XML string to a file then load the file
Google+