2010-01-06 6 views
2

J'essaie d'ajouter et de supprimer des éléments d'un fichier C# .csproj. Le fichier, en partie, apparaît ci-dessous. Quelqu'un peut-il me montrer comment je peux faire les deux choses suivantes?Ajouter un élément au fichier xml

  1. Ajouter un élément comme indiqué ci-dessous (la ligne qui dit: « Je veux ajouter cette »)
  2. Supprimer un élément. Par exemple, disons que je voulais supprimer la ligne I indiquée ci-dessous.
<?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

Cherchez-vous comment ajouter l'élément ou comment l'ajouter au nœud ItemGroup spécifique? –

+0

Je souhaite ajouter un noeud ItemGroup spécifique. J'ai marqué le noeud exact que j'aimerais ajouter (voir la ligne qui dit "Je veux ajouter ceci"). –

Répondre

4

Vous pouvez ajouter votre ligne indiquée de la manière suivante:

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); 

Pour retirer votre ligne indiquée, essayez ceci:

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 cela devrait être bien

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

Merci. Cette réponse serait plus utile si elle était adaptée à mon exemple. –

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); 
Questions connexes