質問

<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("&nbsp;", "").Trim()).Trim())
                                            {
                                                tempDefectRows.Add(node.Attributes["Name"].Value.ToString(), StripTagsCharArray(nodeIterator2.Current.ToString().Replace("&nbsp;", "").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;
}

他のヒント

Linq to xml is a nice way to parse xml string Code project has good article LINQ to XML. This may help you

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top