【问题标题】:PowerShell select-xml xpath doesn't seem to workPowerShell select-xml xpath 似乎不起作用
【发布时间】:2011-05-17 13:36:55
【问题描述】:

我正在尝试使用 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 的行为有点令人困惑。有人知道为什么会这样吗?

【问题讨论】:

  • 如果您的“feature.xml”遵循this 文档,您应该使用绑定到命名空间URI http://schemas.microsoft.com/sharepoint/ 的前缀进行该QName 测试。否则://*[local-name()='Feature']
  • @Alejandro:特性 xml 只是有一个属性 xmlns="schemas.microsoft.com/sharepoint"。我不是专家,但这不是设置默认命名空间吗?我想如果设置了默认命名空间,XPath 就不需要额外的规范了。
  • 没有。这是一个常见问题解答:没有前缀的 QName 测试选择 null(或空)命名空间 URI 下的元素。

标签: xml sharepoint powershell select-xml


【解决方案1】:

也许问题出在 xml 命名空间上。尝试使用 -namespace 获取正确的 xpath 查询。

通过从 feature.xml 文件中删除 xmlns 并运行您的命令来测试它。

【讨论】:

  • +agreed... 我要发表评论询问 xml 的命名空间
【解决方案2】:

甚至必须为 Select-Xml 指定一个“默认”命名空间,例如:

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

【讨论】:

  • 如果我使用默认命名空间xmlns,这是有问题的,因为powershell指示一个是保留的。
  • 即使是默认命名空间中的元素也必须在 XPath 表达式中进行限定。
猜你喜欢
  • 1970-01-01
  • 2018-06-07
  • 2017-09-10
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2016-11-29
  • 2016-02-01
  • 2020-09-23
相关资源
最近更新 更多