概要
Web.configのappSettingsみたいに、XMLエレメントを1レコードに見立てて属性にデータを格納しているデータを、CSVに変換したい。Powershellでやってみました。
詳細
対象となるデータのイメージはこんな感じ。
<?xml version="1.0"?> <configuration> <appSettings> <add key="setting for hoge" value="hogevalue" /> <add key="setting for hage" value="hagevalue" /> <add key="setting for fuga" value="fugavalue" /> </appSettings> </configuration>
add要素のところのデータをこんな感じにcsvにしたい。
setting for hoge,hogevalue setting for hage,hagevalue setting for fuga,fugavalue
スクリプトはこうなりました。
$xmlDoc = (Get-Content <xmlファイルへのパス>) $xmlNavi = $xmlDoc.CreateNavigator() $xmlNavi.Select("//add") | %{$key = $_.getattribute("key",""); $value = $_.getattribute("value", ""); Write-Host "${key},${value}"}
add要素のうち、keyに”setting for”が含まれるものだけを処理する場合はxpathのcontaints関数を使えばOK。
$xmlDoc = (Get-Content <xmlファイルへのパス>) $xmlNavi = $xmlDoc.CreateNavigator() $xmlNavi.Select("//add[contains(@key, 'setting for')]") | %{$key = $_.getattribute("key",""); $value = $_.getattribute("value", ""); Write-Host "${key},${value}"}