как стать отличным в XMLDocument - PullRequest
0 голосов
/ 19 сентября 2011

Я пытаюсь получить Distinct из XMLDocument и загрузить в выпадающий список.

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 голосов
/ 19 сентября 2011

Почему вы не используете Linq to XML?

В противном случае создайте массив значений ключа и используйте его для выделения в качестве ключа.

Edit:

Ваше отличие на 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;
        }
    }
}

Вы должны выбрать поле ведьмы, которое хотели бы выделить. XmlNode с тем же идентификатором - это не тот же объект!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...