まず、thisを参考にしたいと思います。これは、PowerShellスクリプトのマイナーな変更に基づいています。特定の属性を含む複数のXMLファイル内の要素を削除する
変更されたスクリプトの目標は、フォルダー内のすべてのXMLを調べ、オブジェクト内にオブジェクトが存在し、ソースファイルが.epsで終わるところにオブジェクトとすべてを削除することです内に上記の参照されたリンクから、属性のすべてのオブジェクトが確実に考慮されるように見えました。私はワイルドカードを使用しようとしましたが、それを実行するとエラーは出ませんでしたが、2番目のオブジェクトタグも削除されませんでした。ここで
は、オブジェクト/オブジェクトのサンプルXMLである:ここで
<object class="graphic svg eps file_name:AR1.svg name:AR1" data="sample.svg" height="100" type="image/svg+xml" width="100">
<object class="graphic svg eps file_name:AR1.eps name:AR1" data="sample.eps" height="400" type="application/postscript" width="400">
<p>NONE</p>
</object>
</object>
は変形例である:
Get-ChildItem 'C:\test\*.xml' | ForEach-Object {
$xml = [xml](Get-Content $_.FullName)
$xml.SelectNodes("//object/object") | Where-Object {
$_.class -eq "*" -and
$_.data -eq "*.eps" -and
$_.height -eq "*" -and
$_.type -eq "application/postscript" -and
$_.width -eq "*"
} | ForEach-Object {
$_.ParentNode.RemoveChildNode($_)
}
$xml.Save($_.FullName)
}
私はワイルドカードはまだ動作するはずという印象の下にあった、と属性を持つため、ワイルドカードはXMLファイル名と画像ファイル名に基づいてランダムに表示され、ワイルドカードを使用するのが最適です。
私は非常に緑色で、PowerShellの新機能ですが、何か助けていただければ幸いです。
編集:
@TheMadTechnicianの助けを借りて、私はどの作品以下にスクリプトを更新しました!
$items | ForEach-Object {
$xml = [xml](Get-Content $_.FullName)
$xml.SelectNodes("//*[@type='application/postscript']") | %{ $_.parentnode.removechild($_) }
$xml.Save($_.FullName)
は、お返事ありがとうございました!私はXPathの詳細を読む – parsnup