首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于属性的订单XmlNodeList

基于属性的订单XmlNodeList
EN

Stack Overflow用户
提问于 2011-12-23 08:48:02
回答 3查看 12.4K关注 0票数 7

我有一个XmlNodeList,它包含来自下面的XML示例根目录的数据包(项)。我想根据节点的键属性值对XmlNodeList进行排序。排序必须非常有效,每毫秒都很重要。

你有什么想法吗?

代码语言:javascript
复制
<root>
    <item key="1000000020">
        Content 20
    </item>
    <item key="1000000001">
        Content 1
    </item>
    ...
    <item key="1043245231">
        Content n
    </item>
</root>

编辑:我已经从项目构建了一个XmlNodeList。我不再拥有访问XmlDocument的权限了,只访问了项目列表。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-12 15:17:02

我以一种非常不优雅的方式解决了这个问题:

我迭代了我的XmlNodeList

  • During迭代,我提取了一个时间戳,提取了一个时间戳,我把时间戳-XmlElement添加到一个SortedDictionary

  • Converted,SortedDictionary to list (sortedKeys = sortedByDateDisctionary.Keys.ToList();)

  • If,节点需要降序排序,然后sortedKeys.Reverse();

  • Then,节点可以被排序的键

访问)

票数 0
EN

Stack Overflow用户

发布于 2011-12-23 08:59:30

您应该尝试Linq到XML。

代码语言:javascript
复制
 XDocument doc = XDocument.Load(file);

   var nodeList = from ele in doc.Descendants("item")
                   orderby int.Parse(ele.Attribute("key").Value)
                   select ele;

你可以试试XPathNavigatorXPathExpression

代码语言:javascript
复制
 //I presume that variable xNodeList contains XmlNodeList.
  XPathNavigator nav=xNodeList.Item(0).OwnerDocument.CreateNavigator();
  XPathExpression exp = nav.Compile("root/item");


  exp.AddSort("@key", XmlSortOrder.Ascending, XmlCaseOrder.None, "", XmlDataType.Number );

  foreach (XPathNavigator t in nav.Select(exp))
  {
    Console.WriteLine(t.OuterXml );
   }
票数 3
EN

Stack Overflow用户

发布于 2014-12-20 21:37:16

注意: xml变量是字符串值。

代码语言:javascript
复制
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

IEnumerable<XmlNode> rows = doc.SelectNodes("report/table/row").Cast<XmlNode>().OrderByDescending(r => Convert.ToDecimal(r.Attributes["conversions"].Value));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8613904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档