我正在使用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元素的子元素的Reference元素的节点的所有Include属性值?”
最佳答案
我认为您需要:
//msb:ItemGroup/*[not(self::msb:Reference)]/@Include
含义:整个文档中的所有
Include
子元素的msb:ItemGroup
属性(msb:Reference
除外)关于xpath - Xpath不是通过Powershell在Select-Xml中的运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4975014/