我们如何使用PowerShell将多个XML文件转换为对象?
假设我们有一个XML文件目录
$xmlfiles = Get-ChildItem C:\Directory -Filter *.xml
foreach ($file in $xmlfiles) {
[xml]$file Get-Content $_
}
我不确定如何继续 - 如果我们想要在传递时查询每个文件,我们是否需要嵌套foreach
?
我只是作为XML进行转换,以便跨多个文档进行简单查询。 我的所有文档都有相同的模式,我想从每个文档中选择一组一致的节点和属性。
我按照评论中的建议尝试了
foreach ($file in $xmlfiles) {
Select-Xml $file -Xpath "//node2"
}
但是我得到了运行时异常:
Cannot convert value "sample-document.xml" to type "System.Xml.XmlDocument". Error: "The specified node cannot be inserted as the valid child of this node, because the specified node is the wrong type." At line:1 char:10 + foreach ($file in $xmlfiles) { + ~~~~~ + CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException + FullyQualifiedErrorId : RuntimeException
答案 0 :(得分:4)
根据评论中的建议,您可以使用the Select-Xml
cmdlet直接针对文件运行XPath查询。
您可以将FileInfo
个Get-ChildItem
对象直接传送到Select-Xml
:
Get-ChildItem C:\Directory -Filter *.xml |Select-Xml -XPath '//node2'
如果您需要使用ForEach-Object
或循环进行进一步处理,请将文件的FullName
属性提供给Select-Xml
:
foreach($xmlFile in Get-ChildItem C:\Directory -Filter *.xml){
$QueryResult = Select-Xml -Path $xmlFile.FullName -XPath '//node2'
}