• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:<xsl:key>とtopreceding-siblingを使ったグループ化)

<xsl:key>とtopreceding-siblingを使ったグループ化

このQ&Aのポイント
  • <xsl:key>とtopreceding-siblingを使ったグループ化について解説します。
  • 指定したXMLデータをCOUNTRYごとにグループ化し、CSV形式で出力するためのXSLTスタイルシートを作成します。
  • しかし、現在のXSLTスタイルシートではうまく動作しないため、他の方法を試す必要があります。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1>"c:\windows\system32\msxml3.dll"にしなければいけないのではないか あんまり詳しくはないのですが、私は、IE6で動作確認しています。 IE6は、msxml3.dllは使ってなかった(別途ダウンロードしてインストールしなければいけなかったような気がします)と思います。 質問文のXSLで欲しい結果にならない理由がDLLだという意味なら、 それは、違うと思います。 select="//z:row[not(@COUNTRY = preceding-sibling:://z:row/@COUNTRY)]"> でセレクトされるのは、それまでとCOUNTRYがことなるもの つまり JAPAN,TARO CHINA,SABURO の2つのデータをセレクトすることを意味していると思われるからです。 #1>XMLのデバッグにはどのような方法があるのでしょうか? この時のこの値という意味なら、開発環境でインスペクトすればいいと思いますが、 構文エラーが表示されるので、まずは、IEで動作させてみるのがいいと思います。 例えば、質問文のXSLであれば、 xmlns:xsl="http://www.w3.org/TR/WD-xsl"に「xsl:keyがない」 ネームスペース「z:」が定義されていないとか表示されます。 あとついでに言えば、<xsl:key>宣言は、xsl:templateの中で使われていないので必要ないと思います。

yruri
質問者

お礼

前回教えて頂いた方法で要素ごとにグループ化することが出来ました。 xmlns:xsl="http://www.w3.org/TR/WD-xsl"にxsl:keyがないことが原因でした。 バージョンが違うのですね、これで動作が変わるとは思いもいませんでした、ただのコメントくらいに思っていましたので。 http://support.microsoft.com/kb/278674/JA/ 上記のサイトでダウンロードしたscriptによると どうやら私の環境ではmsxml3.dllが標準で使われているようでしたので、"c:\windows\system32\msxml3.dll" に変更しました。 デバッグの仕方、<xsl:key>の解説までして頂いて 僕にとってはアドバイスではなくとてもいい回答になっていました。 本当にありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

ちょっと違うかもしれませんが・・ --------------------------------- <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:rs="#dummy#" xmlns:z="#RowsetSchema"> <xsl:template match="/"> <xsl:for-each select="//z:row"> <xsl:if test="not(@COUNTRY=preceding-sibling::z:row/@COUNTRY)"> スペース </xsl:if> <xsl:value-of select="@COUNTRY" />,<xsl:value-of select="@NAME" />,<xsl:value-of select="@AGE" /> </xsl:for-each> </xsl:template> </xsl:stylesheet>

yruri
質問者

お礼

BLUEPIXY様 ありがとうございます。 こういう指定の仕方もあるんですね 勉強になります。 実はVC++の MSXMLのXSLTを使用しているのですが、#importしているDLLが"c:\windows\system32\msxml.dll"としており"c:\windows\system32\msxml3.dll"にしなければいけないのではないかと疑っております。 XMLのデバッグにはどのような方法があるのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A