Xpath 不是通过 Powershell 在 Select-Xml 中的运算符

标签 xpath powershell operators csproj select-xml

我正在处理 csproj 文件,并且正在尝试编写一个 cmdlet 来提取项目文件引用的所有文件。这将包括所有 Compile、EmbeddedResource、Resource、Content 和 None 元素(更重要的是,它们的 @Include 值)但我特别想排除 Reference 元素,因为它们引用 dll,我不关心这些元素。

我没有太多经验,但我认为我想要的 xpath 表达式看起来像这样

$projectFile | Select-Xml -namespace @{msb="http://schemas.microsoft.com/developer/msbuild/2003"} -xpath "//msb:ItemGroup/*[not(self::node() = msb:Reference) and @Include]"

但是,一旦我尝试引入 self::node(),我的表达式就不会返回任何节点。不过,我不是 100% 确定 self::node() 是执行此操作的正确方法。知道我会更改什么以使其在概念上返回“不是引用元素的节点的所有包含属性值,它们是 ItemGroup 元素的子元素吗?”

最佳答案

我认为你需要:

//msb:ItemGroup/*[not(self::msb:Reference)]/@Include

含义: msb:ItemGroup 的任何子项的所有 Include 属性,msb:Reference,在整个文档中

关于Xpath 不是通过 Powershell 在 Select-Xml 中的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4975014/

相关文章:

java - 使用 XPath 从 XML 获取元素值

java - jdom2 XPath 查询的结果不明确

python - 使用 Selenium 和 Python 通过单击而不使用 url 下载文件

xml - 如何使用 XPath 获取节点值/innerHTML?

git - "Too many revisions"git 消息

PowerShell 输出文件

powershell - 为什么 -Verbose 使 Copy-Item 忽略 ErrorActionPreference?

r - 之间的区别和||在 R

C++赋值运算符,我们可以用copy来代替它吗?

c - 如何在没有指数运算符的情况下用 C 编程转换多项式?