c# - 使用 C#、LINQ 对 XML 中的对象进行排序并写回新的 XML 文件
问题描述
我有以下 XML 文件,并且想根据修订节点对对象进行排序,然后将排序的对象写回 XML 文件。我试过 LINQ 但没有运气
<?xml version="1.0" encoding="utf-8"?>
<v1:VNETList xmlns="http://www.xxxxxx.com/NET/eeim" xmlns:v1="http://www.xxxxxx.com/NET/List">
<Objects>
<ID>00-0000-PPP-0001 Template</ID>
<Object>
<ID>00-0000-PPP-0001</ID>
<Revision>2.0</Revision>
<Name>600-0000-PPP-0001</Name>
<ClassID>CL_Diagram</ClassID>
<Association type="is fulfilled by">
<Object>
<ID>aae9d_application/pdf</ID>
<Revision>2.0</Revision>
<ClassID>FILE</ClassID>
<Characteristic>
<Name>InfoType</Name>
<Value>pdf</Value>
</Characteristic>
</Object>
</Association>
<Characteristic>
<Name>Status</Name>
<Value>Historic</Value>
</Characteristic>
</Object>
<Object>
<ID>00-0000-PPP-0001</ID>
<Revision>3.0</Revision>
<Name>00-0000-PPP-0001</Name>
<ClassID>CL_Diagram</ClassID>
<Association type="is fulfilled by">
<Object>
<ID>090aaead_application/pdf</ID>
<Revision>3.0</Revision>
<ClassID>FILE</ClassID>
</Object>
</Association>
<Characteristic>
<Name>Transmittal Number</Name>
<Value>111111</Value>
</Characteristic>
<Characteristic>
<Name>Is PSI</Name>
<Value>yes</Value>
</Characteristic>
</Object>
<Object>
<ID>00-0000-PPP-0001</ID>
<Revision>1.0</Revision>
<Name>00-0000-PPP-0001</Name>
<ClassID>CL_Diagram</ClassID>
<Characteristic>
<Name>Is Confidential?</Name>
<Value>False</Value>
</Characteristic>
<Characteristic>
<Name>Is PSI</Name>
<Value>yes</Value>
</Characteristic>
</Object>
</Objects>
我想订购,所以修订版 1 将首先出现,然后是 2,最后是三个。任何帮助将不胜感激。
解决方案
尝试 xml linq :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XElement objects = doc.Descendants().Where(x => x.Name.LocalName == "Objects").FirstOrDefault();
XElement firstObject = objects.Elements().Where(x => x.Name.LocalName == "Object").FirstOrDefault();
XNamespace ns = firstObject.GetDefaultNamespace();
List<XElement> sortedObjects = objects.Elements(ns + "Object")
.OrderBy(x => (string)x.Descendants(ns + "Revision").FirstOrDefault())
.ToList();
objects.Elements(ns + "Object").Remove();
objects.Add(sortedObjects);
doc.Save(FILENAME);
}
}
}
推荐阅读
- django - axios 中的 POST 请求,用于在 django restframework api 中创建对象
- azure - ADF v2 确保每日作业将在每小时(24 小时)作业成功后运行
- ios - 应用程序进入后台时出现红条问题(使用 AVCaptureSession)和 AVCamPreviewLayer 混蛋
- android - 我可以从科尔多瓦的 android 访问 localStorage 数据吗
- javascript - 仅在所有过程完成后如何显示对象?
- automation - 从 hiera 评估 puppet manifest 中的哈希值
- python - 如何在 python 中打开终端窗口并发送命令?
- facebook - 如何在 Botframework 版本 4 中使轮播图像可点击
- flask - 在 jinja 模板中使用其他变量创建新的多行字符串变量
- checkbox - ngx 数据表默认选择复选框