xml - powershell,xml,如何区分和元素
问题描述
读取数据后,是否可以区分 XML 数据(属性或元素)中值的来源?如果我运行以下脚本
$xml= [xml]@'
<?xml version="1.0" encoding="utf-8"?>
<root>
<item id="001">
</item>
<item>
<id>002</id>
</item>
<item id="003">
<id>003 bis</id>
</item>
</root>
'@
$items = Select-Xml -Xml $xml -XPath '//item'
$items | %{ $_.node }
$_.node
对于前两个项目,我得到相同的结构,最后一个id
项目的值数组id
id
--
001
002
{003, 003 bis}
解决方案
PowerShell对XML DOM 的改编表示属性和子元素,就好像它们是XML 元素的属性一样。
但是,非叶 XML 元素(具有作为元素的属性和/或子节点的元素)保留其System.Xml.XmlElement
身份,并使用 PowerShell 的 ETS(扩展类型系统)简单地用表示属性和子元素的属性进行装饰。
因此,您还可以访问XmlElement
的本机类型成员(属性和方法),这允许您区分属性和子元素:
$xml= [xml] @'
<?xml version="1.0" encoding="utf-8"?>
<root>
<item id="001">
</item>
<item>
<id>002</id>
</item>
<item id="003">
<id>003 bis</id>
</item>
</root>
'@
Select-Xml -Xml $xml -XPath '//item' | ForEach-Object {
[pscustomobject] @{
IdAttribute = $_.Node.GetAttribute('id') # get attribute
IdChildElement = $_.Node['id'].InnerText # get child element
}
}
以上产生:
IdAttribute IdChildElement
----------- --------------
001
002
003 003 bis
推荐阅读
- c# - 如何在视图中包装列表列
- jquery - JQuery 未呈现 Thymeleaf -> 飞碟 -> PDF
- reactjs - 单击按钮后对滑块中的更改幻灯片做出反应
- c# - 检查所有 IQueryable 项是否不等于默认值
- microsoft-teams - Powerapps Teams 连接器能否向个人发送即时消息与在频道中发帖?
- javascript - 如何重新初始化 dropzone 元素
- graphviz - 如何强制neato引擎反转节点顺序?
- angular - Angular 7 - 成功登录后显示用户名
- mongodb - Mongodb:如何翻译值?
- javascript - 如何在 JavaScript 中调用返回另一个函数的函数?