• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:IEのmsxmlでxmlをcsvに変換)

IEのmsxmlでxmlをcsvに変換

このQ&Aのポイント
  • 現在IEにくっついているmsxmlでxmlファイルをcsvに変換させるxslを作成中です。
  • msxmlでもmsxml3でも動くようなxslファイルを作成したいです。
  • xslで一件分のデータの終わりを認識できない問題についても解決策を探しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • fatback
  • ベストアンサー率84% (11/13)
回答No.1

リプライがないようなので。 ><dummy name="ENDRECORD"></dummy>を追加して xslで一件分のデータの終わりを認識させています の意味がよくわかりませんでしたので、データから削除してしまいました。不都合ならば加えて下さい。 必要ないと(私は)思うのですが。 position()がわかるということは、ワーキングドラフト(MSXML)仕様だけでいいですよね。 >どなたかワーキングドラフト仕様でも勧告後の仕様でも動くような 私には無理です(笑)。最近は勧告仕様オンリーですね。 ■XMLファイル #変更あり <?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="CSV.XSL"?> <root> <data> <record> <aaaa>1234</aaaa> <bbbb>5678</bbbb> <cccc>9abc</cccc> </record> <record> <aaaa>1122</aaaa> <bbbb>3344</bbbb> <cccc>5566</cccc> </record> </data> </root> ■XSL #ワーキングドラフト仕様 -csv.xsl- <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" version="1.0"> <xsl:template match="/"> <xsl:apply-templates select="root/data/record" /> </xsl:template> <xsl:template match="root/data/record"> <xsl:apply-templates /> </xsl:template> <xsl:template match="record/*"> <xsl:value-of select="."/>,</xsl:template> <xsl:template match="record/*[end()]"> <xsl:value-of select="."/><br/> </xsl:template> </xsl:stylesheet> --------------------- <br/>は変更して下さい。

mok
質問者

お礼

end()を使用すればよかったのですね! なるほど。 fatbak様、わざわざサンプルまで用意していただきありがとうございます。 返事が遅れた事をお詫び致します。

mok
質問者

補足

その他の回答 (1)

  • fatback
  • ベストアンサー率84% (11/13)
回答No.2

たびたびすみません、fatbackです。 わかりにくい書き方をしてしまいましたので反省/補足(蛇足)します。 私の記述したXSLだと<dummy> をrecordの子要素の最後だと認識しますので、XMLファイルから<dummy>を削除しないと最後にカンマが残ってしまうはずです。あえて書かなかったのですが、わかりにくい表現だったと反省しています。<dummy>を削除すれば<ccc>を最後の要素として認識しますのでカンマが消えます。ようするに<dummy>の存在意義が理解できなかったのです。 以下のXSLで<dummy>要素を削除/追加してみれば、どこに各テンプレートが適用されているかがわかるはずです。<xsl:for-each> を使わない理由も(笑)。 ■XSL #ワーキングドラフト仕様(HTML) -csv.xsl- <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html lang="ja"> <head> <title>XML-CSV-HTMLサンプル</title> <style> .yes { color: blue; } .no { color: red; } </style> </head> <body> <xsl:apply-templates select="root/data/record" /> </body> </html> </xsl:template> <xsl:template match="root/data/record"> <div> <strong>■レコード</strong><xsl:apply-templates /></div> <hr/> </xsl:template> <xsl:template match="record/*"> <div>「<xsl:value-of select="."/>」はカンマ<strong class="yes">有り</strong></div> </xsl:template> <xsl:template match="record/*[end()]"> <div>「<xsl:value-of select="."/>」はカンマ<strong class="no">無し</strong></div> </xsl:template> </xsl:stylesheet> --- 次回からソースの公開は控えさせて頂きますので、御了承下さい。

mok
質問者

お礼

サンプルソースで納得しました。 補足までしていただきありがとうございます!

関連するQ&A