C#如何移除XML父节点PaymentRecord且保留其子节点内容
移除XML中PaymentRecord节点但保留内容的C#实现
你的核心需求是把PaymentRecord节点的子节点迁移到它的父节点Payments下,再删除空的PaymentRecord节点。之前的代码直接删除了整个节点,没有处理子节点迁移,所以内容丢失了。
基于XmlDocument的修正代码
这是贴合你现有代码的解决方案:
XmlNodeList payloadRecordList = queuePayload.SelectNodes("//Payments/PaymentRecord"); foreach (XmlElement paymentRecordNode in payloadRecordList) { XmlNode paymentsNode = paymentRecordNode.ParentNode; // 把PaymentRecord的所有子节点移到Payments节点下 while (paymentRecordNode.FirstChild != null) { // AppendChild会自动将节点从原父节点移除,添加到新父节点 paymentsNode.AppendChild(paymentRecordNode.FirstChild); } // 删除空的PaymentRecord节点 paymentsNode.RemoveChild(paymentRecordNode); // 后续处理:获取处理后的XML string processedXml = queuePayload.OwnerDocument.OuterXml; // 插入数据库等逻辑 }
更简洁的LINQ to XML方案(备选)
如果可以切换到XDocument(C#中更现代的XML处理方式),代码会更简洁:
// 假设你的XML内容是字符串形式 string originalXml = "你的原始XML字符串"; XDocument doc = XDocument.Parse(originalXml); var paymentRecord = doc.Descendants("PaymentRecord").FirstOrDefault(); if (paymentRecord != null) { // 迁移子节点到Payments下 paymentRecord.Parent.Add(paymentRecord.Elements()); // 删除PaymentRecord节点 paymentRecord.Remove(); } // 得到处理后的XML string processedXml = doc.ToString();
内容的提问来源于stack exchange,提问作者user17824023
相关产品推荐
相关产品推荐

