【问题标题】:how to get distinct in XMLDocument如何在 XMLDocument 中变得与众不同
【发布时间】:2011-09-19 17:55:22
【问题描述】:

我正在尝试从 XMLDocument 中获取 Distinct 并加载到下拉列表中。

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

【问题讨论】:

  • 您要解决的具体问题是什么,这不会返回一组不同的结果吗?
  • 你为什么不用XElement
  • 您的代码示例包含语法错误。
  • 使用 linq to xml 和使用 linq 可以轻松获取不同的值。
  • 检查此代码是否静态 IEnumerable GetOwners(XDocument doc, string cat) { return from item in doc.Descendants("item") where item.Attribute("cat").Value = = cat select (int)item.Attribute("owner")).Distinct(); }

标签: c# .net xml xmldocument


【解决方案1】:

为什么不使用 Linq to XML?

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

编辑:

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

试试

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

编辑2:

使用这个方法:

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不是同一个对象!

【讨论】:

  • 我愿意使用 linq to xml...我开始使用它但卡住了,这就是为什么我要使用 xmldocument 路由...
  • 'var topicNodes = xdoc.SelectNodes("//content:Topic", nsmgr).Cast().Select(c => c.InnerText).First().Distinct( );'我先尝试,然后再不同还是一样
  • 难道没有 //content:Id 或其他要区分的东西吗?
  • 我尝试了您更新的代码,它确实返回了我的全部(没有不同)并且所有主题名称都是空的(其中没有数据)
猜你喜欢
  • 2020-11-23
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 2012-05-15
  • 2012-07-02
  • 2018-11-13
相关资源
最近更新 更多