You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:15:35