【问题标题】:Sort XmlElement by Attribute value按属性值对 XmlElement 进行排序
【发布时间】:2013-06-06 13:37:28
【问题描述】:

我有

XmlElement root;

包含这样的结构

<?xml version="1.0" encoding="us-ascii"?>
<EntityCollection xmlns="">
    <Application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <id>C</id>
        <CDate>2010-06-29T00:00:00</CDate>
        <Applicants>
            <PersonID>1</PersonID>     
            <Age>4651</Age>
            <IncomeCollection>
                <Amount>20</Amount>
                <Frequency>W</Frequency>
            </IncomeCollection>
        </Applicants>
        <Applicants>
            <PersonID>15</PersonID>     
            <Age>4651</Age>
            <IncomeCollection>
                <Amount>20</Amount>
                <Frequency>W</Frequency>
            </IncomeCollection>
        </Applicants>
        <Applicants>
            <PersonID>6</PersonID>     
            <Age>4651</Age>
            <IncomeCollection>
                <Amount>20</Amount>
                <Frequency>W</Frequency>
            </IncomeCollection>
        </Applicants>
        <tag>N</tag>
    </Application>
</EntityCollection>

我想按 PersonID 对申请人进行排序,结果如下:

<?xml version="1.0" encoding="us-ascii"?>
<EntityCollection xmlns="">
    <Application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <id>C</id>
        <CDate>2010-06-29T00:00:00</CDate>
        <Applicants>
            <PersonID>1</PersonID>     
            <Age>4651</Age>
            <IncomeCollection>
                <Amount>20</Amount>
                <Frequency>W</Frequency>
            </IncomeCollection>
        </Applicants>
        <Applicants>
            <PersonID>6</PersonID>     
            <Age>4651</Age>
            <IncomeCollection>
                <Amount>20</Amount>
                <Frequency>W</Frequency>
            </IncomeCollection>
        </Applicants>
        <Applicants>
            <PersonID>15</PersonID>     
            <Age>4651</Age>
            <IncomeCollection>
                <Amount>20</Amount>
                <Frequency>W</Frequency>
            </IncomeCollection>
        </Applicants>
        <tag>N</tag>
    </Application>
</EntityCollection>

【问题讨论】:

标签: c# .net xml c#-4.0


【解决方案1】:

Altought XmlParsers 不保证你会在 xml 文件中按顺序获取元素,这里是使用 Linq2Xml 的解决方案

var xDoc = XDocument.Load(fname);
var applicants = xDoc.Descendants("Applicants")
                     .OrderBy(a=>(int)a.Element("PersonID"))
                     .ToList();
applicants.ForEach(a=>a.Remove());
xDoc.Root.Element("Application").Add(applicants);
xDoc.Save(fname);

【讨论】:

  • 什么是 fname?我有xmlement
  • @JustinHomes fname 是 xml 文件的路径。如果您有 xml 作为 string 使用 XDocument.Parse
  • 'Altought XmlParsers 不保证您会按 xml 文件中的顺序获取元素':XML 中元素的顺序是相关的,XML 解析器应该(并且确实)保证顺序是不断的阅读和写作
  • @JustinHomes using System.Linq;
猜你喜欢
  • 1970-01-01
  • 2013-02-12
  • 2023-04-03
  • 2021-07-20
  • 1970-01-01
  • 2016-02-08
  • 2010-11-02
相关资源
最近更新 更多