删除具有相同路径和名称的节点

时间:2016-09-28 09:14:28

标签: c# xml

我创建了一个treeview xml程序,允许您管理树xml。我需要一个程序功能,它将按名称和路径删除项目。

例如:

    <Main>
<Set>
    <MId>1</MId>
    <RName>
        <MetaData>
            <PrdctName>
                Test 1
            </PrdctName>
        </MetaData>
    </RName>
</Set>
<Set/>
<Set/>
<Set>
    <MId>2</MId>
    <RName>
        <MetaData>
            <PrdctName>
                Test 1
            </PrdctName>
        </MetaData>
    </RName>
</Set>
</Main>

我想删除&#34; PrdctName&#34;在所有xml文件中按名称和相同的路径。有人可以帮帮我吗?

编辑:我尝试类似的东西,但这不起作用:

void deletebytag(TreeNodeCollection nodes)
    {
        List<TreeNode> nodee = new List<TreeNode>();

        foreach (TreeNode node in nodes)
        {
            if (node.Name == "au_id")
            {
                nodee.Add(node);
            } 
            else
            {

                deletebytag(node.Nodes);

            }
        }
        foreach (TreeNode node in nodee)
        {
            nodes.Remove(node);

        }

    }

1 个答案:

答案 0 :(得分:-1)

与所有列表集合对象一样,您需要从最后一项删除到第一项,因此索引不会搞砸。我在下面使用了xml Liinq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication16
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            List<XElement> prdctNames = doc.Descendants("PrdctName").ToList();

            for (int i = prdctNames.Count - 1; i >= 0; i--)
            {
                prdctNames[i].Remove();
            }

        }
    }
}