我正在尝试从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();
答案 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不是同一个对象!