2010-01-06 3 views
2

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

  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> 
+0

Вы ищете, как добавить элемент вообще или как добавить его к определенному узлу ItemGroup? –

+0

Я хотел бы добавить конкретный узел ItemGroup. Я отметил точный узел, который хотел бы добавить (см. Строку, в которой говорится: «Я хочу добавить это»). –

ответ

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

Ithink это должно быть хорошо

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")); 
+0

Спасибо. Этот ответ был бы более полезен, если бы он был адаптирован к моему примеру. –

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); 
Смежные вопросы