使用 PowerShell Core 7.4.6。
鉴于文件/path/to/file.csproj
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="Path\To\Something.csproj" />
</ItemGroup>
</Project>
我期望以下代码片段ProjectReference
使用内置的 XPathends-with
函数从该文件中选择节点
select-xml -path "/path/to/file.csproj" `
-xpath "/Project/ItemGroup/ProjectReference[ends-with(@Include, 'Something.csproj')]"
但相反,它会产生错误
Select-Xml: Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function.
如果我尝试使用 XPath 函数命名空间明确地确定其范围
select-xml -path "/path/to/file.csproj" `
-xpath "/Project/ItemGroup/ProjectReference[fn:ends-with(@Include, 'Something.csproj')]" `
-namespace @{ "fn" = "http://www.w3.org/2005/xpath-functions" }
我收到了另一个错误
Select-Xml: XsltContext is needed for this query because of an unknown function.
我错过了什么?文档Select-Xml
提到对调用 XPath 函数没有任何限制,因此我认为它们是本机支持的。
.NET 中内置的 XPath 支持仅涵盖 XPath 版本 1.0/1.1 指定的功能 -
ends-with
直到版本 2 才成为 XPath 的一部分。您可以使用
substring
/string-length
来切断字符串的尾部,然后查找它: