首页 > 解决方案 > Innertext 并不总是返回 xml 元素的内容

问题描述

我在 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 解析器在解析时忽略“类型”属性吗?

标签: xmlpowershellparsinginnertext

解决方案


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

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

推荐阅读