[Powershell]1レコードを1要素として属性にデータが入っているXMLをCVSに変換する

概要

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}"}

コメントを残す