gpt4 book ai didi

c# - 使用 linq 对 XMLDocument 进行排序

转载 作者:行者123 更新时间:2023-11-30 21:13:16 25 4
gpt4 key购买 nike

我似乎不知道该怎么做。这里还有其他几个例子,但没有一个真正符合我想要做的:

考虑以下 XMLDocument 对象:

<Policy>
<Covers>
<MyCover1>
<properties>
<sortOrder>1</sortOrder>
</properties>
</MyCover1>

<MyCover3>
<properties>
<sortOrder>3</sortOrder>
</properties>
</MyCover3>

<MyCover2>
<properties>
<sortOrder>2</sortOrder>
</properties>
</MyCover2>
</Covers>
</Policy>

我将如何使用 linQ 或其他方法根据节点“sortOrder”对该文档进行排序?

排序后的 outerxml 基本上应该是这样的:

<Policy>
<Covers>
<MyCover1/>
<MyCover2/>
<MyCover3/>
</Covers>
</Policy>

更新

我取得了一些进展,现在数据已排序,但如何更新原始未排序的 XmlDocument?这是我目前所拥有的:

private static void DoSort(XmlDocument policyDocument)
{
foreach(XmlNode coverGroup in policyDocument.SelectNodes("//CoverGroup"))
{
XDocument test = XDocument.Parse(coverGroup.OuterXml);
var sorted = from xe in test.Element("CoverGroup").Elements()
let so = xe.Element("properties").Element("displayOrder")
let num = (int)so
orderby num
select xe;

var result = new XElement("CoverGroup", sorted);
}
}

我需要将更改应用回“policyDocument”。注意:封面可以有自己的 CoverGroup,然后又可以有自己的 CoverGroups。这至少下降了 4 个级别:即

<Policy>
<Covers>
<MyCover1>
<properties>
<sortOrder></sortOrder>
</properties>
<CoverGroup>
<MyCover1Child>
<properties>
<sortOrder></sortOrder>
</properties>
</MyCover1Child>
</CoverGroup>
</MyCover1>
...
</Covers>

上面的 XPATH 和 foreach 覆盖了上面的结构,所以我想也许只是用新的排序列表替换第一个 foreach 中的 coverGroup XmlNode,但我不知道如何重建一个新的 XmlNode。如果我们能解决这个问题,那么我们可以简单地这样做:

policyDocument.ReplaceChild(coverGroup, mySortedXmlNode)

最佳答案

您可以尝试如下(使用 XDocument,而不是 XmlDocument):

var document = XDocument.Parse( /* the xml string */ );

var sorted = from xe in document.Element("Policy").Element("Covers").Elements()
let so = xe.Element("properties").Element("sortOrder")
let num = (int)so
orderby num
select xe;

var result = new XElement("Policy", new XElement("Covers", sorted));

我写的代码没有测试,但我认为应该是一个很好的起点。

关于c# - 使用 linq 对 XMLDocument 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6922180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com