2

XML ファイルから一部のコンテンツを抽出しようとしています。1 つのファイルに対して必要なものはありますが、ディレクトリ内のすべてのファイルに対してそれを行う必要があります。これまでのところ、私が持っているものは次のとおりです。

$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

次のことを試してください。

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 に答える