OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

IEのmsxmlでxmlをcsvに変換

  • すぐに回答を!
  • 質問No.101822
  • 閲覧数710
  • ありがとう数13
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 100% (3/3)

現在IEにくっついているmsxmlでxmlファイルをcsvに変換させるxslを作成しています。
msxmlでもmsxml3でも動くようなxslファイルを作成したいので
ワーキングドラフト仕様のxslの記述を使用しようと思い下記のようなXMLとxslを作成しました

<?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>
<dummy name="ENDRECORD"></dummy>
</record>
<record>
<aaaa>1122</aaaa>
<bbbb>3344</bbbb>
<cccc>5566</cccc>
<dummy name="ENDRECORD"></dummy>
</record>
</data>
</root>

xslのposition()が使えないので
xmlに
<dummy name="ENDRECORD"></dummy>
を追加して
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:for-each select="*">
<xsl:choose>
<xsl:when test="./@name[(.='ENDRECORD')]">&#xA;</xsl:when>
<xsl:otherwise><xsl:value-of select="."/>,</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

しかし、csvのカンマ編集が以下のようになってしまいます。

1234,5678,9abc, ←最後にカンマが残ってしまう
1122,3344,5566,

どなたかワーキングドラフト仕様でも勧告後の仕様でも動くような、csvに変換するxslを作成された方はいませんでしょうか。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル7

ベストアンサー率 84% (11/13)

リプライがないようなので。

><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

お礼率 100% (3/3)


投稿日時 - 0000-00-00 00:00:00
お礼コメント
mok

お礼率 100% (3/3)

end()を使用すればよかったのですね!
なるほど。

fatbak様、わざわざサンプルまで用意していただきありがとうございます。
返事が遅れた事をお詫び致します。
投稿日時 - 2001-07-17 17:01:58
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.2
レベル7

ベストアンサー率 84% (11/13)

たびたびすみません、fatbackです。 わかりにくい書き方をしてしまいましたので反省/補足(蛇足)します。 私の記述したXSLだと<dummy> をrecordの子要素の最後だと認識しますので、XMLファイルから<dummy>を削除しないと最後にカンマが残ってしまうはずです。あえて書かなかったのですが、わかりにくい表現だったと反省しています。<dummy>を削除す ...続きを読む
たびたびすみません、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

お礼率 100% (3/3)

サンプルソースで納得しました。
補足までしていただきありがとうございます!
投稿日時 - 2001-07-17 17:04:58
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ