繁体   English   中英

如何在c#中的csproj文件中删除节点?

[英]How to delete a node in csproj file in c#?

我想删除节点<Reference Include="System.Data" />

从csproj文件中以编程方式。 我的csproj文件文件结构是这样的:

<ItemGroup>
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data.OracleClient" />
    <Reference Include="System.Messaging" />
    <Reference Include="System.Web.DynamicData" />
    <Reference Include="System.Web.Entity" />
    <Reference Include="System.Web.ApplicationServices" />
    <Reference Include="System.ComponentModel.DataAnnotations" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Core" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="System.Web.Extensions" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Web" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Configuration" />
    <Reference Include="System.Web.Services" />
    <Reference Include="System.EnterpriseServices" />
  </ItemGroup>

我正在尝试使用此代码,但无法正常工作:

XmlDocument doc = new XmlDocument();
doc.Load(fullFilePath);
XmlNode node = doc.SelectSingleNode(@"/Project/ItemGroup/Reference[@Include='System.Data']");

node.ParentNode.RemoveChild(node);

doc.Save(fullFilePath);

当您的SelectNodes或SingleSelectNodes不返回任何内容时,表示您的查询错误。 在这种情况下,.csproj中的元素属于一个名称空间(此处声明为“默认”名称空间-w / oa前缀)

<Project ... xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
</Project>

因此,您的代码必须更改为此:

XmlDocument doc = new XmlDocument();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
nsmgr.AddNamespace("p", "http://schemas.microsoft.com/developer/msbuild/2003");
doc.Load(fullFilePath);
XmlNode node = doc.SelectSingleNode(@"/p:Project/p:ItemGroup/p:Reference[@Include='System.Data']", nsmgr);

node.ParentNode.RemoveChild(node);

doc.Save(fullFilePath);

请注意,前缀“ p”可以是任何东西,它只允许您在XPATH表达式中指定对应的名称空间,但是即使在原始文档中将其声明为默认名称空间,也需要它。

使用XML Linq轻松

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input =
                "<Root>" +
                    "<ItemGroup>" +
                        "<Reference Include=\"Microsoft.CSharp\" />" +
                        "<Reference Include=\"System.Data.OracleClient\" />" +
                        "<Reference Include=\"System.Messaging\" />" +
                        "<Reference Include=\"System.Web.DynamicData\" />" +
                        "<Reference Include=\"System.Web.Entity\" />" +
                        "<Reference Include=\"System.Web.ApplicationServices\" />" +
                        "<Reference Include=\"System.ComponentModel.DataAnnotations\" />" +
                        "<Reference Include=\"System\" />" +
                        "<Reference Include=\"System.Data\" />" +
                        "<Reference Include=\"System.Core\" />" +
                        "<Reference Include=\"System.Data.DataSetExtensions\" />" +
                        "<Reference Include=\"System.Web.Extensions\" />" +
                        "<Reference Include=\"System.Xml.Linq\" />" +
                        "<Reference Include=\"System.Drawing\" />" +
                        "<Reference Include=\"System.Web\" />" +
                        "<Reference Include=\"System.Xml\" />" +
                        "<Reference Include=\"System.Configuration\" />" +
                        "<Reference Include=\"System.Web.Services\" />" +
                        "<Reference Include=\"System.EnterpriseServices\" />" +
                      "</ItemGroup>" +
                  "</Root>";

            XDocument doc = XDocument.Parse(input);
            List<XElement> itemGroup = doc.Descendants("ItemGroup").ToList();

            itemGroup.Elements("Reference").Where(x => x.Attribute("Include").Value == "System.Data").Remove();
        }
    }
}
​

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM