2

我正在尝试从 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 格式。谁能帮我吗?

4

3 回答 3

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
于 2013-10-16T16:25:09.770 回答
3

尝试以下操作:

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 的几个不错的功能。您可能想要安装 PowerShell 3.0(您还需要 .NET 4.0),您将能够通过 IntelliSense 探索各种 PowerShell 功能。

于 2013-10-16T21:17:38.227 回答
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
}
于 2013-10-18T11:31:16.713 回答