【发布时间】:2020-01-13 04:00:36
【问题描述】:
我正面临在 Powershell 中进行 XML 解析的令人讨厌的行为。
我正在尝试获取 XML 元素的内容,但取决于是否设置了属性“类型”,获取内容的方式不同。
例子:
$xml = [xml] @'
<elem>
<id type="integer">1</id>
<name>test</name>
</elem>
'@
$content = $xml.elem.id
Write-Host "content : $content"
$content = $xml.elem.id.InnerText
Write-Host "content: $content"
$content = $xml.elem.name
Write-Host "content: $content"
$content = $xml.elem.name.InnerText
Write-Host "content: $content"
结果如下:
content: System.Xml.XmlElement
content: 1
content: test
content:
所以有时我有一个 XmlElement 对象,有时我有一个原语。
是否有一种简单而独特的方式来获取 Xml 元素的内容? 或者也许我们可以告诉 XML 解析器在解析时忽略“类型”属性?
【问题讨论】:
-
您可以测试您的属性的类型。
$xml.elem.id -is [System.Xml.XmlElement]将返回 true。$xml.elem.name -is [System.Xml.XmlElement]将返回 false。例如,如果你只关心#text,你可以直接输出$xml.SelectNodes("//*").'#text'。
标签: xml powershell parsing innertext