存在的所有值都没有被添加到c#中的字典中

时间:2013-08-12 13:41:40

标签: c# xml dictionary foreach

所有存在的值都没有被添加到c#中的字典中 以下是目前为止的代码段:

 XmlNodeList Bugs_filter = Bugs.SelectNodes("/criteria/includeFilterSets/filterSet/filter");
    if (Bugs_filter != null)
    {

        foreach (XmlNode BNode in Bugs_filter)
        {
            string data = BNode.SelectSingleNode("/criteria/includeFilterSets/filterSet/filter/filterName").InnerText;
            string aggregate = BNode.SelectSingleNode("/criteria/includeFilterSets/filterSet/filter/value").InnerText;

            {   
                 Dict.Add(data,aggregate);
            }
        }
    }

'Bugs_Filter'中总共有3个值存在,而当它第二次进入循环时,它仅获取第一个值。请指出我做错了什么。

请参阅我从中提取值的XML:

 <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><criteria><includeFilterSets><filterSet><filter><filterId>42</filterId>
    <filterName>PRODUCT_ID</filterName><operator><id>1</id><name>Equals</name></operator><value>1113</value></filter><filter><filterId>41</filterId>
    <filterName>FAMILY_ID</filterName><operator><id>1</id><name>Equals</name></operator><value>ESG</value></filter><filter><filterId>3</filterId><filterName>VERSION_NAME</filterName>
    <operator><id>1</id><name>Equals</name></operator><value>4.5</value></filter></filterSet></includeFilterSets><excludeFilterSets/><ordering/>
    <bugGroupSearchMode>0</bugGroupSearchMode><caseSensitive>true</caseSensitive><entityToSearch><id>1</id><name>BUG</name></entityToSearch></criteria>

请注意,我正在解压缩PRODUCT_ID,FAMILY_ID和VERSION_NAME。

2 个答案:

答案 0 :(得分:1)

请注意你在这里想做什么: 在foreach语句中,您有filter个节点,在它们下面搜索整个路径“/ criteria / includeFilterSets / filterSet / filter / filterName”。你不会那样到达正确的节点。

相反,请谨慎使用BNode.ChildNodes[1]BNode.ChildNodes[3]

string data = BNode.ChildNodes[1].InnerText;
string aggregate = BNode.ChildNodes[3].InnerText;

甚至更好:

string data = BNode["filterName"].InnerText;
string aggregate = BNode["value"].InnerText;

答案 1 :(得分:-1)

你试过吗?

string data = BNode.SelectSingleNode("./filterName").InnerText;
string aggregate = BNode.SelectSingleNode("./value").InnerText;

由于您提供了完整路径,因此每次都会从根元素开始搜索。通过.,您可以说“此节点下的filterName节点”,其中this是当前BNode