2011-09-19 4 views
0

XMLDocument에서 Distinct을 가져 와서 Dropdownlist에로드하려고합니다.XMLDocument에서 구별하는 방법

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(); 
+0

해결하려는 문제가 정확히 무엇이며, 별개의 결과 집합을 반환하지 않습니까? – Kevek

+0

왜 XElement를 사용하지 않습니까? – SLaks

+0

코드 샘플에 구문 오류가 있습니다. – Tomalak

답변

0

가 왜 LINQ to XML을 사용하지 마십시오 : 여기

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

내 전체 코드인가?

그렇지 않으면 키 값 배열을 만들고 키로 구분 기호 값을 사용하십시오.

편집 :

innerText와에 귀하의 distincting가 올바른 값이다? 별개의 것으로 먼저 시도한 다음 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가 동일한 객체가 아닙니다!

+0

나는 linq를 xml로 사용하도록 개방되어있다 ... 나는 그것을 사용하기 시작했으나 붙어있어 xmldocument 라우트를 사용하는 이유는 무엇인가 ... –

+0

'var topicNodes = xdoc.SelectNodes ("// content : Topic", nsmgr) .Cast () .Select (c => c.InnerText) .First(). Distinct(); ' 나는 먼저 시도하고 그 후에도 여전히 똑같아 야한다. –

+0

// content : Id 또는 구별해야 할 것이 없습니까? – Max

관련 문제