I am looking to parse and modify a project file of type .dbproj
.
Sample XML
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<ProjectGroup></ProjectGroup>
<ItemGroup></ItemGroup>
<ItemGroup></ItemGroup>
<ItemGroup></ItemGroup>
<ItemGroup>
<Build Include="myfile.cs">
<SubType>Code</SubType>
</Build>
<Build Include="myfile2.cs">
<SubType>Code</SubType>
</Build>
<Build Include="myfile3.cs">
<SubType>Code</SubType>
</Build>
</ItemGroup>
<ItemGroup>
<NotInBuild Include="myfile4.cs">
<SubType>Code</SubType>
</NotInBuild>
</ItemGroup>
</Project>
I want to take the item from the 4th <ItemGroup>
with the attribute Include="myfile.cs"
and remove it from said <ItemGroup>
. Next, I want to add this element:
<NotInBuild Include="myfile.cs">
<SubType>Code</SubType>
</NotInBuild>
It is slightly modified from the one removed to the 5th ItemGroup
. The result should be:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<ProjectGroup></ProjectGroup>
<ItemGroup></ItemGroup>
<ItemGroup></ItemGroup>
<ItemGroup></ItemGroup>
<ItemGroup>
<Build Include="myfile2.cs">
<SubType>Code</SubType>
</Build>
<Build Include="myfile3.cs">
<SubType>Code</SubType>
</Build>
</ItemGroup>
<ItemGroup>
<NotInBuild Include="myfile.cs">
<SubType>Code</SubType>
</NotInBuild>
<NotInBuild Include="myfile4.cs">
<SubType>Code</SubType>
</NotInBuild>
</ItemGroup>
</Project>
Per another SO post by Skeet, I started going down the LINQ path.I don't know where to go from here
XDocument doc = XDocument.Load(XmlDocumentPath);
XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003";
var query = doc.Root
.Elements(ns + "ItemGroup");