[PowerShell] CSV から XML への変換+漢字コード変換
[4/13 ??: PowerShell 1.0 ?????????????????????????????????????????????]
??????????PowerShell ???????????PowerShell ???????????????????????????????? PowerShell ???????????????????????????????
??????????????
- CSV ????????????? UTF-8?
- CSV ??????????XML ????
- UTF-16 ?????????
????????? CSV ???? stock-utf8.csv ???????(??????????????????????????????????????)
???,??,??
???,1000,?
???,500,?
???,100,?
??,20,?
???,3,?
1?????????????????????? PowerShell ???????????
$csv = Import-CSV f:\stock-utf8.csv
???Shift JIS ? CSV ????? Import-CSV ??????????????????? Unicode ?????????????PowerShell ??
type stock-sjis.csv > stock-unicode.csv
?????Unicode (UTF-16) ?????????????
CSV ????????????XML ????????????????????????????????CSV ?????????? XML ??????????????????????????????(?????)
$label = @{ DisplayName="???";
Quantity="??"; Unit="??"}
???????????????NoteProperty ?????????????????
$label = $csv | Get-Member -MemberType NoteProperty
| Select-Object Name
?????? XML ????????????????????????System.Xml.XmlDocument ??????????
$xml = New-Object xml
????XmlDeclaration ????????????????????????????????????? UTF-16 ?????????
$decl = $xml.CreateXmlDeclaration("1.0","UTF-16",$null)
[void]$xml.AppendChild($decl)
???root ??????????????Stock ????????????
$root = $xml.CreateElement("Stock")
[void]$xml.AppendChild($root)
???? Stock ?????Product ??????????
foreach ($prod in $csv){
$product = $xml.CreateElement("Product")
[void]$root.AppendChild($product)$label.keys | foreach {
$prop = $xml.CreateElement($_)
$prop.PSBase.InnerText = $prod.($label[$_])
[void]$product.AppendChild($prop)
}
}
????????CSV ??????? <Product></Product> ????????????????????????????????????????
??????? $label.keys ?????????$label.keys ??XML ????????????? CSV ???? $label[$_] ??????????
??????????????????XmlDocument.Save ????????????????????????????????????? XmlDocument ??????? XmlDeclaration ?????????????????????????XmlDeclaration.Encoding ???????????????????????????????????Encoding ?????????????
$xml.Save("f:\stock.xml")
??????? $xml.Save([Console]::Out) ?????????????????????????? encoding ? shift_jis ??????
?????????UTF-16 ???????????????????
??????PowerShell ?????????????????????????? XML ??????? .NET Framework ? XML ????????????????????????????????????????????????????????????
Comments
Anonymous
January 01, 2003
昨日「 [PowerShell] CSV から XML への変換+漢字コード変換 」という投稿を更新しました。サンプルが、PowerShell 1.0 で動かないということが分かったため、修正作業をしていたのですが、そこでちょっとはまってしまったお話を。Anonymous
January 01, 2003
修正箇所: 初出時は、XML 冒頭の宣言ノードの作成を $decl = $xml.CreateXmlDeclaration("1.0",$null,$null) $decl.Encoding="UTF-16" としていましたが、PowerShell 1.0 では $decl.psbase.Encoding="UTF-16" としなければエラーになります。 いずれのバージョンでも通るように、CreateXmlDeclaration の引数に Encoding 指定も含めるように修正しました。