我正在尝试从XML文件中提取一些内容。我有我需要为一个文件工作,但我需要为目录中的所有文件。到目前为止我所拥有的是:
$files = Get-ChildItem C:\Users\rasuser\Desktop\import *.xml -recurse
foreach ($file in $files){
$MyXml = [xml](Get-Content $file)
#$path = $file.ExportedContentItem.path
#$name = $file.ExportedContentItem.name
#$GUID = $file.ExportedContentItem.ID
#$path + "/" + $name + " > "+$GUID
}
我真的不了解如何将内容中的读取导入XML格式。任何人都可以帮助我吗?
答案 0 :(得分:3)
如果您的XML看起来像这样<doc><foo name='fooname'><bar>bar content</bar></foo></doc>
,您可以像这样访问内容:
$MyXml = [xml](Get-Content $xmlFile)
$MyXml.doc.foo.name
$MyXml.doc.foo.bar
答案 1 :(得分:2)
尝试以下方法:
function list-xml-files() {
get-childitem -recurse -force | ? { -not $_.psisdirectory } | ? { $_.name.endswith('.xml') }
}
function list-data([xml]$xml) {
$path = $xml.ExportedContentItem.path
$name = $xml.ExportedContentItem.name
$ID = $xml.ExportedContentItem.ID
[string]::Format("{0}/{1} > {2}", $path, $name, $ID)
}
list-xml-files | % { [xml](get-content $_) } | ? { $_.ExportedContentItem } | % { list-data $_ }
此代码遵循更具功能性的编程风格。 '%'是map
,'?'是filter
。
它展示了PowerShell的几个不错的功能。您可能需要install PowerShell 3.0(您还需要.NET 4.0),您将能够通过IntelliSense探索各种PowerShell功能。
答案 2 :(得分:0)
尝试读取单个xml文件路径时出错。我用$ _。fullname:
解决了这个问题Get-ChildItem C:\Users\rasuser\Desktop\import *.xml -recurse |
% {
$file = [xml](Get-Content $_.fullname)
$path = $file.ExportedContentItem.path
$name = $file.ExportedContentItem.name
$GUID = $file.ExportedContentItem.ID
$out = $path + "/" + $name + "`t" + $GUID
$out
}