Добавить элемент в XML-файл - PullRequest
2 голосов
/ 06 января 2010

Я пытаюсь добавлять и удалять элементы из файла C # .csproj. Файл, частично, появляется ниже. Может кто-нибудь показать мне, как я могу сделать следующие две вещи?

  1. Добавьте элемент, как показано ниже (строка «Я хочу добавить» это ")
  2. Удалить элемент. Например, скажем, я хотел удалить строку I указал ниже.
<?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 ]

4 голосов
/ 08 января 2010

Вы можете добавить указанную строку следующим образом:

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 голос
/ 08 января 2010
        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);
1 голос
/ 06 января 2010

Я думаю, это должно быть хорошо

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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...