<Entity>
<Fields>
- <Field Name="expected">
<Value>011919884841926</Value>
</Field>
- <Field Name="name">
<Value>Dial</Value>
</Fields>
<Fields>.....</Fields>
<Fields>.....</Fields>
<Fields>.....</Fields>
<Fields>......</Fields>
<Fields>....</Fields>
</Entity>
how to get Dial = 011919884841926 as a key value pair in c#.
List<Dictionary<string, string>> tempDefect = new List<Dictionary<string, string>>();
if (!string.IsNullOrEmpty(responseXML))
{
XmlDocument configXml = new XmlDocument();
configXml.LoadXml(responseXML);
XPathNavigator navigator = configXml.CreateNavigator();
XPathNodeIterator nodeIterator = (XPathNodeIterator)navigator.Evaluate(rootEntities + "/" + rootEntity + "/" + rootElement);
for (int i = 0; i < nodeIterator.Count; i++)
{
nodeIterator.MoveNext();
Dictionary<string, string> tempDefectRows = new Dictionary<string, string>();
configXml = new XmlDocument();
configXml.LoadXml(nodeIterator.Current.OuterXml.ToString());
navigator = configXml.CreateNavigator();
XPathNodeIterator nodeIterator1 = (XPathNodeIterator)navigator.Evaluate(rootElement + "/" + loginParamsElement);
if (nodeIterator.Count != 0)
{
for (int j = 0; j < nodeIterator1.Count; j++)
{
nodeIterator1.MoveNext();
XmlNode node = ((IHasXmlNode)nodeIterator1.Current).GetNode();
if (attributes.Contains((T)Enum.Parse(typeof(T), node.Attributes["Name"].Value.ToString().Replace("-", "_"), true)))
{
if (node.HasChildNodes)
{
configXml.LoadXml(node.InnerXml.ToString());
XPathNavigator navigator2 = configXml.CreateNavigator();
XPathNodeIterator nodeIterator2 = (XPathNodeIterator)navigator2.Evaluate("Value");
if (nodeIterator2.Current.ToString().Trim() != StripTagsCharArray(nodeIterator2.Current.ToString().Replace(" ", "").Trim()).Trim())
{
tempDefectRows.Add(node.Attributes["Name"].Value.ToString(), StripTagsCharArray(nodeIterator2.Current.ToString().Replace(" ", "").Trim()).Trim());
}
else
{
tempDefectRows.Add(node.Attributes["Name"].Value.ToString(), nodeIterator2.Current.ToString().Trim());
}
}
else
{
tempDefectRows.Add(node.Attributes["Name"].Value.ToString(), string.Empty);
}
}
}
if (tempDefectRows.ContainsValue(filterBy))
{
testID = tempDefectRows["id"].ToString();
tempDefect.Add(tempDefectRows);
if (typeof(T).Name.ToString() == "Test")
break;
}
}
}
}
This is my research and work arround. but im getting the desired out put after 2 to 3 loops... thats the reasson i have posted here..... Is there any easy way to get the solution.
Using Linq To Xml
var xDoc = XDocument.Load(filename);
var dict = xDoc.Descendants("Fields")
.ToDictionary(f => GetValue(f, "name"), f => GetValue(f, "expected"));
string GetValue(XElement root, string attr)
{
return root.Elements("Field")
.First(a => a.Attribute("Name").Value == attr)
.Element("Value").Value;
}