XMLからcsvへの変換
下記のXMLのフィールドの項目を
xslを使い、msxsl.exe経由で、csvへ変換をしたいのですが、
各field nameを抽出するのがうまくいきません。
copy condition=の箇所は必要ありません。
どなたかご教示のほど、お願いいたします。
■XML
<?xml version="1.0" encoding="UTF-8"?>
<exportData>
<Book id="id">
<field name="keywords"></field>
<field name="listName"></field>
<field name="publisher"></field>
<field name="publishDate"></field>
<field name="illustrators"></field>
<field name="isbn"></field>
<field name="length"></field>
<field name="id"></field>
<field name="series"></field>
<field name="authors"></field>
<field name="title"></field>
<field name="summary"></field>
<field name="format"></field>
<field name="genre"></field>
<field name="coverImage"></field>
<field name="List Price"></field>
<field name="URL"> </field>
<field name="Current Value"></field>
<field name="isbn13"></field>
<copy condition="" dateAcquired="" location="Bookshelf" owner="" presentValue="" source="">
</copy>
</Book>
■xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/">keywords,listName,publisher,publishDate,illustrators,isbn,length,id,series,authors,title,summary,format,genre,coverImage,URL,CurrentValue,isbn13
<xsl:apply-templates select="//Book"/>
</xsl:template>
<xsl:template match="Book">
<xsl:call-template name="keywords"/>,<xsl:call-template name="listName"/>,<xsl:call-template name="publisher"/>,<xsl:call-template name="publishDate"/>,<xsl:call-template name="illustrators"/>,<xsl:call-template name="isbn"/>,<xsl:call-template name="length"/>,<xsl:call-template name="id"/>,<xsl:call-template name="series"/>,<xsl:call-template name="authors"/>,<xsl:call-template name="title"/>,<xsl:call-template name="summary"/>,<xsl:call-template name="format"/>,<xsl:call-template name="genre"/>,<xsl:call-template name="coverImage"/>,<xsl:call-template name="URL"/>,<xsl:call-template name="CurrentValue"/>,<xsl:call-template name="isbn13"/><xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
よろしくお願いいたします。
お礼
ありがとうございます。 各値をクリアすることで必要とする結果を得ることができました。 お手数をおかけしました。 おかげさまで助かりました。
補足
t-okura 様 ご回答いただき、ありがとうございます。 test.xml の先頭・最後の行にそれぞれ以下の行を追加しました。 <XMLDOC> ... </XMLDOC> 下記のように実行したところ、2つ目のデータについても変換できました。 ありがとうございます。 > perl xml2csv.pl test.xml 20121129045500,8515C4,JAL1406,03075,177,330,-832,000,35.4003,139.8822,3341 20121129045500,86CF11,JAL1406,20100,177,330,0,000,0,0,3341 上記の結果について重ねてお聞きしたいのですが、 test.xmlにおいて2つ目のデータでは、CALLSIGN、GROUNDSPEED、TRACK、SQUAWK等の要素がないため、 1つ目のデータの値がクリアされずにそのまま出力されてしまっています。 データがない場合は0または文字を消去して「,0,」または「,,」となるようにしたいのですが、 その場合どこを修正すればよろしいのでしょうか。 お手数をおかけします。 よろしくお願いします。