【发布时间】:2020-07-27 16:44:56
【问题描述】:
我正在寻找一种方法来遍历基于 XML API 的响应并以以下格式显示整个 XML 树:
node\node = VALUE
node\node\node = VALUE
node\node\node2 = VALUE
我有一个适用于某些 XML 输出但在其他输出上失败的脚本:
function Get-XMLTree($xml) {
$nodesWithText = $xml.SelectNodes("//*[text()]")
foreach($node in $nodesWithText) {
#Start with end of path (element-name of the node with text-value)
$path = $node.LocalName
#Get parentnode
$parentnode = $node.ParentNode
#Loop until document-node (parent of root-node)
while($parentnode.LocalName -ne '#document') {
#If sibling with same LocalName (element-name) exists
if(@($parentnode.ParentNode.ChildNodes | Where-Object { $_.LocalName -eq $parentnode.LocalName }).Count -gt 1){
#Add text-value to path
$path = "{0}\$path" -f ($parentnode.'#text').Trim()
}
#Add LocalName (element-name) for parent to path
$path = "$($parentnode.LocalName)\$path"
#Go to next parent node
$parentnode = $parentnode.ParentNode
}
#Output "path = text-value"
"$path = $(($node.'#text').Trim())"
}
}
对于某些 XML 响应,这可以顺利进行。对于其他人,我收到类似于以下的错误:
InvalidOperation: /script1.ps1:51:17
Line |
51 | $path = "{0}\$path" -f ($parentnode.'#text').Trim()
| You cannot call a method on a null-valued expression.
感谢任何帮助
【问题讨论】:
-
你能发布一个最小的 xml 文档,给你例外吗?
标签: xml powershell printing tree display