2011-09-19 30 views
0

我試圖從XMLDocument獲取Distinct並將其加載到Dropdownlist中。如何在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(); 
+0

你試圖解決的問題究竟是什麼,這是否不會返回一組不同的結果? – Kevek

+0

你爲什麼不使用'XElement'? – SLaks

+0

您的代碼示例包含語法錯誤。 – Tomalak

回答

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不是同一個對象!

+0

我打開使用LINQ到XML ...我開始使用它,但卡住了,這就是爲什麼我去使用xmldocument路由... –

+0

'var topicNodes = xdoc.SelectNodes(「// content:Topic」,nsmgr ).Cast ().Select(c => c.InnerText).First()。Distinct();'我嘗試第一次,然後不同仍然是相同的 –

+0

是不是有一個/ /內容:身份證或東西明確? – Max