在C#中遍历XML并移动指定子元素的技术需求
调整XML中Claim元素内的OrderClosed位置
原XML结构如下:
<Order> <Header> <SenderName>Tim</SenderName> </Header> <Body> <Claim> <OrderNumber>12345</OrderNumber> <OrderClosed>2023-12-09</OrderClosed> <OrderDate>2023-12-07</OrderDate> <Service> <Operation>Order</Operation> </Service> </Claim> <Claim> <OrderNumber>67891</OrderNumber> <OrderClosed>2023-12-05</OrderClosed> <OrderDate>2023-12-04</OrderDate> <Service> <Operation>Order</Operation> </Service> </Claim> </Body> </Order>
使用XDocument实现
using System.Xml.Linq; // 加载XML文档 XDocument doc = XDocument.Load("你的XML文件路径"); // 遍历所有Claim元素 foreach (XElement claim in doc.Descendants("Claim")) { // 获取当前Claim下的OrderClosed和OrderDate元素 XElement orderClosed = claim.Element("OrderClosed"); XElement orderDate = claim.Element("OrderDate"); if (orderClosed != null && orderDate != null) { // 先移除OrderClosed orderClosed.Remove(); // 将OrderClosed插入到OrderDate的紧后方 orderDate.AddAfterSelf(orderClosed); } } // 保存修改后的XML doc.Save("修改后的XML文件路径");
使用XmlDocument实现
using System.Xml; // 加载XML文档 XmlDocument doc = new XmlDocument(); doc.Load("你的XML文件路径"); // 获取所有Claim节点 XmlNodeList claimNodes = doc.SelectNodes("//Claim"); foreach (XmlNode claim in claimNodes) { XmlNode orderClosed = claim.SelectSingleNode("OrderClosed"); XmlNode orderDate = claim.SelectSingleNode("OrderDate"); if (orderClosed != null && orderDate != null) { // 先移除OrderClosed claim.RemoveChild(orderClosed); // 将OrderClosed插入到OrderDate的紧后方 claim.InsertAfter(orderClosed, orderDate); } } // 保存修改后的XML doc.Save("修改后的XML文件路径");
说明
- 两种方法都会遍历所有
<Claim>元素,确保每个Claim下的<OrderClosed>都被移动到<OrderDate>之后 - 代码中加入了空值判断,避免因节点不存在导致异常
- 替换代码中的文件路径为实际路径即可运行
内容的提问来源于stack exchange,提问作者kirei764
相关产品推荐
相关产品推荐

