1. ホーム
  2. xml

XSLTによるXMLからCSVへの変換

2023-10-26 09:07:47

質問

次のようなXML文書があります。

<projects>
  <project>
   <name>Shockwave</name> 
   <language>Ruby</language> 
   <owner>Brian May</owner> 
   <state>New</state> 
   <startDate>31/10/2008 0:00:00</startDate> 
  </project>
  <project>
   <name>Other</name> 
   <language>Erlang</language> 
   <owner>Takashi Miike</owner> 
   <state> Canceled </state> 
   <startDate>07/11/2008 0:00:00</startDate> 
  </project>
...

そして、これを変換(XSLT)結果から取得したいと思います。

Shockwave,Ruby,Brian May,New,31/10/2008 0:00:00
Other,Erlang,Takashi Miike,Cancelled,07/11/2008 0:00:00

これを実現するためのXSLTをご存知の方はいらっしゃいませんか?因みに私は.netを使っています。

どのように解決するのですか?

XML変換スタイルシートが見つかりました ここで (ウェイバックマシンリンク,サイト自体はドイツ語)

ここに追加されたスタイルシートが参考になると思います。

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1"/>

<xsl:strip-space elements="*" />

<xsl:template match="/*/child::*">
<xsl:for-each select="child::*">
<xsl:if test="position() != last()">"<xsl:value-of select="normalize-space(.)"/>",    </xsl:if>
<xsl:if test="position()  = last()">"<xsl:value-of select="normalize-space(.)"/>"<xsl:text>&#xD;</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

おそらく、CSVファイルを使用する場所によっては、xsl:ifタグの中の引用符を削除して、値を引用符で囲まないようにしたいのでしょう。