【问题标题】:Innertext not always return the content of the xml elementInnertext 并不总是返回 xml 元素的内容
【发布时间】: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


【解决方案1】:

考虑使用 XPath 和 Select-XML。结果将是一个匹配对象。它的Node 属性可用于访问由XPath 查询指定的实际XML 元素。像这样,

(select-xml '/elem/id' $xml).node."#text"
# Output
1
(select-xml '/elem/name' $xml).node."#text"
# Output
test

【讨论】:

    猜你喜欢
    • 2015-04-26
    • 2020-10-17
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多