【发布时间】:2018-11-22 08:06:56
【问题描述】:
谁能帮我根据属性值对 XmlDocument 进行排序。
我给出了一个包含几个 attr 元素的示例 xml。因此,我想根据具有属性 Name="from" 的元素的“值”属性对其进行排序,我正在尝试使用 linq to xml 来实现这一点。
这是我尝试过的一个示例代码。但它只保留排序顺序的“来自”属性。我想要在预期的 xml 下的所有属性,如下所示。
container.ReplaceNodes(
from childEl in container.Elements().Elements()
where childEl.Attribute("Name")?.Value == "from"
orderby childEl.Attribute("Value")?.Value descending
select childEl
);
foreach (XElement childEl in container.Elements().Where(e => e.HasElements))
{
SortByName(childEl);
}
输入 XML:
`<Attrs>
<Attr Name="zddressprevious" isVerified="false">
<Attr Name="from" Value="2014-01-01" isVerified="false" />
<Attr Name="house" Value="3" isVerified="false" />
<Attr Name="street" Value="Test Street" isVerified="false" />
</Attr>
<Attr Name="addressprevious" isVerified="false">
<Attr Name="from" Value="2015-01-01" isVerified="false" />
<Attr Name="house" Value="1" isVerified="false" />
<Attr Name="street" Value="Acacia Avenue" isVerified="false" />
</Attr>
<Attr Name="addressprevious" isVerified="false">
<Attr Name="from" Value="2016-01-01" isVerified="false" />
<Attr Name="house" Value="1" isVerified="false" />
<Attr Name="street" Value="Test Street" isVerified="false" />
</Attr>
</Attrs>`
预期输出:
`<?xml version="1.0" encoding="utf-8"?>
<Attrs>
<Attr <Attr Name="addressprevious" isVerified="false">
<Attr Name="from" Value="2016-01-01" isVerified="false" />
<Attr Name="house" Value="1" isVerified="false" />
<Attr Name="street" Value="Test Street" isVerified="false" />
</Attr>
<Attr Name="addressprevious" isVerified="false">
<Attr Name="from" Value="2015-01-01" isVerified="false" />
<Attr Name="house" Value="1" isVerified="false" />
<Attr Name="street" Value="Acacia Avenue" isVerified="false" />
</Attr>
<Attr Name="zddressprevious" isVerified="false">
<Attr Name="from" Value="2014-01-01" isVerified="false" />
<Attr Name="house" Value="3" isVerified="false" />
<Attr Name="street" Value="Test Street" isVerified="false" />
</Attr>
</Attrs>`
【问题讨论】:
标签: c# linq-to-xml