使用PowerShell删除XML中的子级

时间:2019-01-15 09:53:01

标签: xml powershell

我有一个像这样的XML文件:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="..\XYZ.MyAPP.EntityModel\AppContext.cs" Link="AppContext.cs" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.6" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.0">
    <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
  </ItemGroup>
</Project>

我想删除<ItemGroup>的属性“链接”的<ItemGroup>。 注意:可能有多个<ItemGroup>节点(如本例中所示)发生多次或没有属性“链接”。

我尝试过这样的事情:

[Xml]$xml = Get-Content -Path .\XYZ.MyApp.Model.csproj 
$nodes = $xml.SelectNodes("//Project/ItemGroup")

foreach ($node in $nodes) {
    if ($node.HasChildNodes) {
        foreach ($child in $node.ChildNodes) {
            if ($child.Name -eq "Compile") {
                Write-Host "BINGO"
                $child.ParentNode.ParentNode.RemoveChild("//Project/ItemGroup")
            }
        }
    }
}

注意:此代码无效。我遇到错误:

  

对于“ RemoveChild”类型为“ System.Xml.XmlNode”,无法将参数“ 0”转换为值“ // Project / ItemGroup”:“无法转换类型为” // Project / ItemGroup”的值System.String”以键入“ System.Xml.XmlNode”。”

目标:查找所有<ItemGroup>节点,并仅删除具有链接属性的节点。

0 个答案:

没有答案