xml - 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 解析器在解析时忽略“类型”属性吗?
解决方案
考虑使用 XPath 和Select-XML
. 结果将是一个匹配对象。它的Node
属性可用于访问由 XPath 查询指定的实际 XML 元素。像这样,
(select-xml '/elem/id' $xml).node."#text"
# Output
1
(select-xml '/elem/name' $xml).node."#text"
# Output
test
推荐阅读
- python - 有什么方法可以在不使用 Python 中的可执行文件的情况下抓取 JS 渲染页面?
- css - React Native 中的动画字段宽度
- android - Recycleview 项目大小在对话框片段中不起作用
- opencart - OpenCart 本地到实时服务器
- docker - 在 Jenkins 和 openshift 中运行 docker 容器
- java - 错误:[Dagger/MissingBinding] [dagger.android.AndroidInjector.inject(T)] Dagger
- ios - 无法使用 UIViewPropertyAnimator.fractionComplete 驱动 UIView.transition
- php - 在字符串 laveral 上调用成员函数 all()
- windows - 使用 wget 强制清除缓存
- powershell - 在 Octopus Deploy 中安装 IIS 作为一个步骤