我是Powershell的新手,我正在尝试读取XML文档,然后为每个名为<document>
的节点读取内容。
不太确定如何在powershell中执行此操作。目前,我只是查看名为<document>
的第一个实例,然后在其中。但是文件可以有多个名为<document>
的节点,例如示例。
如何获取每个名为document的节点的实例,然后通过它们foreach
?理想情况下,我想要一个名为document
的节点列表返回,然后我可以迭代它们。
<List state='null'>
<document>
<i_state>null</i_state>
<i_toronto>qwe</i_toronto>
<i_site>123</i_site>
<i_library>potluck</i_library>
<i_url>www.google.com</i_url>
<mmdete>
<metafy>Oblong</metafy>
</mmdete>
</document>
<document>
<i_state>null</i_state>
<i_toronto>qwe</i_toronto>
<i_site>123</i_site>
<i_lib>potluck</i_lib>
<i_url>https:www.google.com</i_url>
<mmdete>
<metafy>Oblong</metafy>
</mmdete>
</document>
</List>
答案 0 :(得分:2)
您可以使用SelectNodes('//nodename')
:
$XmlFile = [xml](Get-Content .\file.xml)
$XmlFile.SelectNodes('//document') |ForEach-Object {
$_ # this now refers to a "document" XmlNode
}
答案 1 :(得分:1)
PowerShell可以很好地使用XML,只要它知道它正在查看它。如果将变量设为[XML]
类型,则可以通过多种方法轻松地引用这些文档节点。例如,我将您的样本保存为“testdata.txt”并执行以下操作:
[xml]$source = get-content testdata.txt
$source.list.document
PowerShell返回以下内容:
i_state : null
i_toronto : qwe
i_site : 123
i_library : potluck
i_url : www.google.com
mmdete : mmdete
i_state : null
i_toronto : qwe
i_site : 123
i_lib : potluck
i_url : https:www.google.com
mmdete : mmdete
如果您不知道该节点的位置,可以使用Select-XML
cmdlet按xpath搜索节点。
$source|select-xml -XPath '//document'|select -expand node
这将提供相同的输出。