PowerShell的select-xml xpath似乎无法工作

13

我正在尝试使用select-xml从SharePoint解决方案中找出一些东西。 我有一个包含多个功能的解决方案目录,而不是手动打开每个feature.xml并选择功能名称并将它们放入列表中,我希望使用powershellselect-xml做相同的事情。

我的尝试大致如下:

ls -recurse -filter feature.xml | select-xml "/Feature"

但是我得到了空的结果,所以我尝试了这个:

ls -recurse -filter feature.xml | select-xml "//*"

这个工具看起来做了它应该做的事情。我得到了解决方案中所有feature.xml文件中每个XML节点的列表。

我尝试了像"//Feature"和"Feature"之类的XPath表达式,但都没有得到任何结果。

我觉得我的XPath表达式是正确的,但select-xml的行为有点令人困惑。有人知道这可能是为什么吗?


4
如果你的"feature.xml"文件遵循这里的文档,那么你应该使用一个绑定到命名空间URI为http://schemas.microsoft.com/sharepoint/的前缀来进行QName测试。否则://*[local-name()='Feature'] - user357812
4
不。这是一个常见问题:没有前缀的QName测试会选择空(或空)命名空间URI下的元素。 - user357812
2个回答

11

即使是“默认”命名空间,也必须在Select-Xml中指定,例如:

$ns = @{dns = 'http://schemas.microsoft.com/sharepoint/'}
ls . -r feature.xml | Select-Xml '//dns:Feature' -Namespace $ns

如果我使用默认的命名空间xmlns,这会有问题,因为PowerShell指示其中一个是保留的。 - Ben Collins
1
默认命名空间中的偶数元素必须在XPath表达式中进行限定。 - Keith Hill

8
也许问题出在xml命名空间上。尝试使用-namespace来获取正确的xpath查询结果。-namespace可以帮助你解决这个问题。
如果遇到问题,可以尝试从feature.xml文件中删除xmlns并运行命令进行测试。

+同意...我打算发表一条评论询问xml的命名空间。 - Robert S Ciaccio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接