给定 XML
<Element>Text</Element>
和
<Element>
<Child>Text</Child>
</Element>
是否有一种简单的方法来区分具有子元素和仅文本(即子节点)的元素?
$xmlElement.HasChildNodes
将为两者返回 True
。我可以用 $xmlElement.ChildNodes.Where({($_.NodeType -eq 'Element')})
玩游戏,但这一点也不优雅。我真正想要的是 $xmlElement.HasChildElements
但这似乎不是一个选择,并且尝试在 PowerShell 中扩展 [Xml.XmlElement]
是相当痛苦的。我觉得唯一的选择是循环遍历所有子节点并在该集合上查找 .NodeType -eq 'Element'
和计数 0。但这感觉像是一件非常常见的事情,因此有一种简单的方法可以做到。
尝试使用xpath;像这样的东西:
$nodes = $xml.SelectNodes("//Element[descendant::*]");
foreach($node in $nodes) {
echo $node.OuterXml
}
输出应该只有:
<Element><Child>Text2</Child></Element>