将元素添加到xml文件

时间:2010-01-06 13:24:49

标签: c# .net xml linq linq-to-xml

我正在尝试添加和删除C#.csproj文件中的元素。该文件部分显示在下方。有人能告诉我如何做以下两件事吗?

  1. 添加如下所示的元素(显示“我要添加的行” 这个“)
  2. 删除元素。例如,假设我想删除第一行 如下所示。
  3. <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="3.5" DefaultTargets="Build" 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
       <PropertyGroup>
          <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    </PropertyGroup>
    <ItemGroup>
       <Reference Include="System.Data" />    
       <Reference Include="System.Deployment" />
    </ItemGroup>
    <ItemGroup>
       <Compile Include="Generate\DatabaseContext.cs" />
       <Compile Include="Generate\EntityClasses.cs" />
       <Compile Include="Generate\Extensions.cs" />
       <Compile Include="Schema\Column.cs" />
       <Compile Include="Schema\EntityRef.cs" />
       <Compile Include="SerializedData\Tables.xml" />  //I want to add this
    </ItemGroup>
    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    </Project>
    

3 个答案:

答案 0 :(得分:4)

您可以通过以下方式添加指定的行:

XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003";
XDocument xDoc = XDocument.Load(fileName);

var b = xDoc.Descendants(ns + "Compile").First();

b.Parent.Add(
    new XElement(ns + "Compile", 
        new XAttribute("Include", @"SerializedData\Tables.xml")
    )
);

xDoc.Save(fileName);

要删除指定的行,请尝试以下操作:

XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003";
XDocument xDoc = XDocument.Load(fileName);

var b = xDoc.Descendants(ns + "Compile")
    .Where(el => el.Attribute("Include").Value == @"SerializedData\Tables.xml");

if (b != null)
{
    b.Remove();
    xDoc.Save(fileName);
}

答案 1 :(得分:1)

我认为这应该没问题

XDocument xmlDoc = XDocument.Load(Server.MapPath("People.xml"));

xmlDoc.Element("Persons").Add(new XElement("Person", new XElement("Name", txtName.Text),
new XElement("City", txtCity.Text), new XElement("Age", txtAge.Text)));

xmlDoc.Save(Server.MapPath("People.xml"));

答案 2 :(得分:1)

        XDocument projects = XDocument.Load(fileName);
        XNamespace xmlns = "http://schemas.microsoft.com/developer/msbuild/2003";

        // Delete element (<Compile Include="SerializedData\Tables.xml" />);
        var query1 = from p in projects.Descendants(xmlns + "Project").Descendants(xmlns + "ItemGroup").Descendants(xmlns + "Compile") 
                     where p.Attribute("Include").Value == @"SerializedData\Tables.xml" select p;
        if (query1.Any())
        {
            XElement node = query1.Single();
            node.Remove(); 
        }

        //System.Diagnostics.Debug.WriteLine(projects);
        projects.Save(fileName);

        // Add the element.
        var query2 = from p in projects.Descendants(xmlns + "Project").Descendants(xmlns + "ItemGroup") where p.Descendants(xmlns + "Compile").Any() select p;
        if (query2.Any())
        {
            query2.Single().Add(new XElement(xmlns + "Compile", new XAttribute("Include", @"SerializedData\Tables.xml")));  
        }
        //System.Diagnostics.Debug.WriteLine(projects);
        projects.Save(fileName);