如何在XMLDocument中获得独特性

时间:2011-09-19 17:55:23

标签: c# .net xml xmldocument

我正在尝试从XMLDocument获取Distinct并加载到Dropdownlist。

var topicNodes = xdoc.SelectNodes("//content:Topic", nsmgr).Cast<XmlNode>().Select(c =>   c.InnerText).Distinct();  

这是我的完整代码:

    XmlDocument xdoc = new XmlDocument();//xml doc used for xml parsing
    xdoc.Load(url);    
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
    nsmgr.AddNamespace("content", "sitename.xsd");

    var topicNodes = xdoc.SelectNodes("//content:Topic", nsmgr).Cast<XmlNode>().Select(c =>   c.InnerText).Distinct();  

    foreach (XmlNode node in topicNodes)
    {
        string topic = node.Attributes["TopicName"].Value;
        //dropdownlist.items.add(new listitem(topic);
        this.dropdownlist.Items.Add(new  ListItem(topic);  
    }
    dropdownlist.databind();

1 个答案:

答案 0 :(得分:0)

为什么不将Linq用于XML?

否则创建一个键值数组,并使用值作为键来区分。

编辑:

你对InnerText的区分是正确的值吗?首先尝试区分,然后选择innerText。

尝试

var topicNodes = xdoc.SelectNodes("//content:Topic", nsmgr).Cast<XmlNode>()**.Distinct()**.Select(c => c.InnerText).ToList();

EDIT2:

使用此方法:

public static IEnumerable<TSource> DistinctBy<TSource, TKey>
     (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
    HashSet<TKey> knownKeys = new HashSet<TKey>();
    foreach (TSource element in source)
    {
        if (knownKeys.Add(keySelector(element)))
        {
            yield return element;
        }
    }
}

你必须选择你想要分辨的女巫领域。具有相同ID的XmlNode不是同一个对象!