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

C#解析XML:过滤QWE节点中不以AA开头的ID属性

C#实现XML中QWE节点ID属性过滤需求

需求:保留XML全部内容,仅对所有<QWE>节点的ID属性做过滤——只保留值以AA开头的ID属性,不符合条件的ID属性直接移除;其他节点(如<RTY>、<AAA>等)的所有内容原样保留。

原有代码的问题

你提供的代码仅遍历了根节点的直接子节点,而示例中<QWE>节点嵌套在<AAA>→<PPP>下,根本不会被遍历到,所以无法处理深层嵌套的QWE节点。需要递归遍历所有节点,才能找到所有QWE并处理其属性。

解决方案1:使用XmlDocument递归处理

这种方案兼容传统.NET框架,通过递归遍历所有节点,针对性处理QWE的ID属性:

// 加载原XML文档
XmlDocument doc = new XmlDocument();
doc.Load("你的XML文件路径");

// 递归处理所有节点的方法
void ProcessNode(XmlNode node)
{
    if (node.NodeType == XmlNodeType.Element && node.Name == "QWE")
    {
        // 获取QWE节点的ID属性
        XmlAttribute idAttr = node.Attributes["ID"];
        if (idAttr != null && !idAttr.Value.StartsWith("AA"))
        {
            // 移除不符合条件的ID属性
            node.Attributes.Remove(idAttr);
        }
        // 如果ID值以AA开头,或者没有ID属性,不做处理
    }

    // 递归处理子节点
    foreach (XmlNode childNode in node.ChildNodes)
    {
        ProcessNode(childNode);
    }
}

// 从根节点开始处理
ProcessNode(doc.DocumentElement);

// 保存处理后的XML
doc.Save("处理后的XML路径");

代码说明

  • 递归遍历所有节点,确保无论QWE嵌套多深都能被找到
  • 仅对QWE节点的ID属性做判断:存在且不以AA开头则移除,其他情况保留原样
  • 所有非QWE节点的内容(包括子节点、属性)完全保留

解决方案2:使用LINQ to XML(更简洁)

如果使用.NET Core/.NET 5+,推荐用LINQ to XML,代码更简洁直观:

// 加载XML
XDocument xDoc = XDocument.Load("你的XML文件路径");

// 找到所有QWE节点,处理ID属性
foreach (XElement qweNode in xDoc.Descendants("QWE"))
{
    XAttribute idAttr = qweNode.Attribute("ID");
    if (idAttr != null && !idAttr.Value.StartsWith("AA"))
    {
        idAttr.Remove();
    }
}

// 保存结果
xDoc.Save("处理后的XML路径");

代码说明

  • Descendants("QWE")直接获取所有层级的QWE节点,无需递归
  • 同样逻辑判断ID属性,不符合则移除
  • 代码量更少,可读性更高

示例输入与输出

输入XML

<MMM>
    <PPP>
        <AAA>
            <QWE ID="AABBCC">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
                <NAME3>CC</NAME3>
            </QWE>
            <QWE ID="AACCBB">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
                <NAME3>CC</NAME3>
            </QWE>
            <QWE ID="CCDDKK">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
                <NAME3>CC</NAME3>
            </QWE>
            <QWE ID="CCKKDD">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
                <NAME3>CC</NAME3>
            </QWE>
        </AAA>
        <BBB>
            <RTY ID="ASDF">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
            </RTY>
            <RTY ID="ASDG">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
            </RTY>
            <RTY ID="ASDH">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
            </RTY>
            <RTY ID="ASDJ">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
            </RTY>
        </BBB>
    </PPP>
</MMM>

处理后输出XML

<MMM>
    <PPP>
        <AAA>
            <QWE ID="AABBCC">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
                <NAME3>CC</NAME3>
            </QWE>
            <QWE ID="AACCBB">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
                <NAME3>CC</NAME3>
            </QWE>
            <QWE>
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
                <NAME3>CC</NAME3>
            </QWE>
            <QWE>
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
                <NAME3>CC</NAME3>
            </QWE>
        </AAA>
        <BBB>
            <RTY ID="ASDF">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
            </RTY>
            <RTY ID="ASDG">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
            </RTY>
            <RTY ID="ASDH">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
            </RTY>
            <RTY ID="ASDJ">
                <NAME1>AA</NAME1>
                <NAME2>BB</NAME2>
            </RTY>
        </BBB>
    </PPP>
</MMM>

内容的提问来源于stack exchange,提问作者user16794037

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:45:38