名称空间声明之后的管道PowerShell XML对象

时间:2018-09-07 08:42:35

标签: xml powershell pipeline

我有这段PowerShell代码,可以正常工作。

$xml = [xml](gc '.\test.xml')
$ns = New-Object Xml.XmlNamespaceManager $xml.NameTable
$ns.AddNamespace("ns", "randomnamespace")

$nodes = $xml.SelectNodes("//ns:tag", $ns)

# print all nodes
foreach ($node in $nodes) {
    Write-Host $node.anotherTag " - " $node.anotherTag.Substring(0,7)
}

我想将其放在一行以用作PowerShell命令,因为我无法更改执行策略。

我尝试了以下操作:

$xml = [xml](gc '.\test.xml') | $ns = New-Object Xml.XmlNamespaceManager $_.NameTable | $ns.AddNamespace('ns', 'tag') | $xml.selectNodes('//ns:anotherTag', $ns) | foreach {Write-Host $_.anotherTag' - ' $_.anotherTag(0,7)}"

但是我收到错误消息

  

只允许将表达式用作管道... NameTable中的第一个元素$ ns.AddNamespace('ns',..)

并且在读取XML文件之前我无法声明名称空间。

有什么办法可以使它正常工作吗?

1 个答案:

答案 0 :(得分:0)

请勿使用管道|,而应使用分号;