この文書では、iPEXにてXSLTを使用し、CSVファイルとXMLファイル間におけるデータの相互変換について解説します。解説にはWindows版C++用ライブラリ形式のiPEXを用います。
XML文書の形式変換
変換元XML文書
次にXSLTを用いて変換する元のXML文書books1.xmlの一部を示します。これは先に示したbooks1.csvをcsv2xml.exeを用いてXML文書に変換したものです。
<?xml version="1.0" encoding="shift_jis"?> |
また、次にXML文書books1.xmlの構造を定義するDTDファイルbooks1.dtdを示します。
<!ELEMENT doc (row*)> |
変換先XML文書のDTD
次にbooks1.xmlからXSLTを用いて変換したいXMLデータの構造を定義するDTD、booklist1.dtdを示します。先に示したbooks1.dtdとの違いがわかると思います。この違う構造をもつXML文書を変換するルールをXSLにより記述します。
| <!ELEMENT booklist (book*)> <!ELEMENT book (type, title, author+, price, published_date, note*)> <!ELEMENT type (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ELEMENT published_date (year, month)> <!ELEMENT year (#PCDATA)> <!ELEMENT month (#PCDATA)> <!ELEMENT note (#PCDATA)> |
変換用XSL
次に変換用XSLのコードを示します。
| <?xml version="1.0" encoding="shift_jis"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template> <xsl:apply-templates/> </xsl:template> <xsl:template match="/"> <booklist> <xsl:apply-templates select="doc"/> </booklist> </xsl:template> <xsl:template match="doc"> <xsl:for-each select="row"> <book> <type><xsl:value-of select="column1"/></type> <title><xsl:value-of select="column2"/></title> <author><xsl:value-of select="column3"/></author> <price><xsl:value-of select="column4"/></price> <published_date> <year><xsl:value-of select="column5"/></year> <month><xsl:value-of select="column6"/></month> </published_date> </book> </xsl:for-each> </xsl:template> </xsl:stylesheet> |
XSLTプログラム
変換元XMLファイルならびに変換用のXSLファイルが準備できました。次のコマンドを用いてbooks1.xmlをbooks1.xslによって変換を行い、変換結果をXMLファイルbooklist2.xmlに出力します。
| C:\>Xsltconv books1.xml books1.xsl |
次は変換結果の一部です。
| <booklist> <book> <type>computer</type> <title>The Art of Computer Programming</title> <author>Donald Ervin Knuth</author> <price>134.95</price> <published_date> <year>1998</year> <month>10</month> </published_date> </book> </booklist> |
XML文書のCSV形式への変換
ここまでCSV形式から、所定のDTDにより定義された構造をもつXML文書を得る方法について解説しました。
ここでは逆に、XML文書をCSVに変換する方法について解説します。
変換用XSL
<?xml version="1.0" encoding="shift_jis"?> <xsl:template> <xsl:template match="/"> <xsl:template match="booklist"> </xsl:stylesheet> |
変換結果
xsltconv.exeはコマンドプロンプトにて次のコマンドを用いることにより、XMLファイルbooklist2.xmlをxml2csv.xslを用いて変換し、booklist2.csvを作成します。
C:\>xsltconv booklist2.xml xml2csv1.xsl > booklist2.csv |
次に変換結果を示します。
<booklist> |
© 2001 Infoteria Corporation
XSLT [Part_01]/[Part_02]
