gpt4 book ai didi

xml - PowerShell XML SelectNodes 无法处理 XPath

转载 作者:数据小太阳 更新时间:2023-10-29 01:39:40 28 4
gpt4 key购买 nike

我想使用 PowerShell 获取我的 csproj 文件中所有项目引用的列表。目前我有以下方法:

[xml]$csproj = Get-Content MyProject.csproj

$refs = $csproj.SelectNodes("//ProjectReference")
foreach($ref in $refs) {
# Later on output more useful information
Write-Host $ref.Name
}

但是,尽管给定的 csproj 文件中肯定有 ProjectReference 元素,但脚本不会输出任何内容。以下是工作:

[xml]$csproj = Get-Content MyProject.csproj
foreach($l in $csproj.Project.ItemGroup.ProjectReference) { Write-Host $l.Include }

但我稍后也需要 XPath + 它为每个不包含 ProjectReference 的 ItemGroup 输出错误 - 那么如何使用 SelectNodes 函数使 XPath 工作?

示例 XML(基本上任何带有项目引用的 VS csproj 文件都可以):

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup></ItemGroup>
<ItemGroup>
<ProjectReference Include="Text"></ProjectReference>
<ProjectReference Include="Text2"></ProjectReference>
</ItemGroup>
<ItemGroup></ItemGroup>
</Project>

最佳答案

问题是 http://schemas.microsoft.com/developer/msbuild/2003 命名空间。您需要在 XPath 表达式中考虑此命名空间,因为 XPath 中没有前缀的元素名称指的是在命名空间中的元素。

[xml]$csproj = Get-Content MyProject.csproj
$ns = new-object Xml.XmlNamespaceManager $csproj.NameTable
$ns.AddNamespace("msb", "http://schemas.microsoft.com/developer/msbuild/2003")

$refs = $csproj.SelectNodes("//msb:ProjectReference", $ns)
foreach($ref in $refs) {
# Later on output more useful information
Write-Host $ref.Name
}

(改编自this answer)

关于xml - PowerShell XML SelectNodes 无法处理 XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23084156/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com