概要
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 = [xml](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 = [xml](Get-Content <xmlファイルへのパス>)
$xmlNavi = $xmlDoc.CreateNavigator()
$xmlNavi.Select("//add[contains(@key, 'setting for')]") | %{$key = $_.getattribute("key",""); $value = $_.getattribute("value", ""); Write-Host "${key},${value}"}