gpt4 book ai didi

c# - 使用 Xpath expression.AddSort(...) 后无法使用 XmlDocument() 保存新的 xml 文件

转载 作者:太空宇宙 更新时间:2023-11-03 15:00:40 26 4
gpt4 key购买 nike

我使用 C#.NET 2.0 并想使用 XPath 对 xml 文件进行排序,然后使用 xmlDoc.Save 保存它。但是,保存的 xml 文件与未经 XPath 处理的原始 xml 相同。这是代码:

    public static void SortOneLevel()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("abc.xml");

XPathNavigator navigator = xmlDoc.CreateNavigator();
XPathExpression expression = navigator.Compile("Root/Test");
expression.AddSort("TestPhase", XmlSortOrder.Ascending, XmlCaseOrder.None, string.Empty, XmlDataType.Number);

xmlDoc.Save("abc1.xml"); //check abc1, same as abc, not sorted

//Check if it is sorted
XPathNodeIterator iterator = navigator.Select(expression);
foreach (XPathNavigator item in iterator)
{
Console.WriteLine(item.Value); //Check printout, sorted
}

xmlDoc.Save("abc2.xml"); //check abc2, same as abc, not sorted
}

我的 XML 文件示例是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>

<Test>
<TestPhase>222</TestPhase>
<TestFlow>1</TestFlow>
<TestParameter>1</TestParameter>
</Test>

<Test>
<TestPhase>214</TestPhase>
<TestFlow>1</TestFlow>
<TestParameter>2</TestParameter>
</Test>

<Test>
<TestPhase>1</TestPhase>
<TestFlow>3</TestFlow>
<TestParameter>1</TestParameter>
</Test>

<Test>
<TestPhase>1</TestPhase>
<TestFlow>2</TestFlow>
<TestParameter>2</TestParameter>
</Test>

<Test>
<TestPhase>2</TestPhase>
<TestFlow>1</TestFlow>
<TestParameter>1</TestParameter>
</Test>
.
.
.
.
</Root>

foreach 循环中 console.writeline 的打印输出是:

131
122
211
212
221
222
311
.
.
.
.
1011
1012
1021
1022
21412
22211

这意味着表达式已成功对其进行排序。但是,我可以告诉你如何保存它吗?我是 XML 的新手。我需要你的帮助。非常感谢您的努力。

非常感谢。

最佳答案

正如评论中提到的,XPath 是一种查询语言——您不能使用 XPath 修改文档。

您可以使用 LINQ to XML 获取 Test 元素,对它们进行排序,然后将它们添加到新文档中:

var original = XDocument.Load("abc1.xml");

var sorted = new XDocument(
new XElement("Root",
original.Elements("Root")
.Elements("Test")
.OrderBy(x => (int) x.Element("TestPhase"))
)
);

sorted.Save("abc2.xml");

参见 this fiddle用于演示。

关于c# - 使用 Xpath expression.AddSort(...) 后无法使用 XmlDocument() 保存新的 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46319133/

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