- - PR -
XSLT、call-templateでのnode-set値パラメータの引渡し方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-03-07 19:12
XML初学者です。相談させてください。
「call-template」でのパラメータの引渡しについて、node-setを引き渡す方法が分かりません。 下記のXSLTスタイルシートで、Text値の引渡し(※1)は成功するのですが、node-setを引渡したい部分(※2)が成功していないようで、node-set値の参照(※3)でエラーとなってしまいます。 node-setの引渡しは、どのように記述したらいいのでしょうか? ----- 呼び出し部分 ------------------------------- <xsl:template match="dataset"> <xsl:for-each select="./data"> <xsl:call-template name="convert"> <xsl:with-param name="vname"> ┐ <xsl:value-of select="./name"/> │※1.Text値 </xsl:with-param> ┘ <xsl:with-param name="vvalue"> ┐ <xsl:copy-of select="./value"/> │※2.node-set </xsl:with-param> ┘ </xsl:call-template> </xsl:for-each> </xsl:template> ----- 呼び出されるテンプレート ------------------- <xsl:template name="convert"> <xsl:param name="vname"/> <xsl:param name="vvalue"/> <xsl:if test="$vname='ObjectName'"> <value> <xsl:attribute name="id">$vname</xsl:attribute> <xsl:value-of select="$vvalue/V"/> ←※3.エラー箇所 </value> </xsl:if> <xsl:if test="$vname='MaterialList'"> <value> <xsl:attribute name="id">$vname</xsl:attribute> <xsl:for-each select="$vvalue/V/V"> <Mtl><xsl:value-of select="."/></Mtl> </xsl:for-each> </value> </xsl:if> </xsl:template> ----- 変換元XMLファイル -------------------------- <?xml version="1.0" encoding="utf-8"?> <dataset> <data> <name>ObjectName</name> <value> <V>JOB-10</V> </value> </data> <data> <name>MaterialList</name> <value> <V> <V>Mtl-201</V> <V>Mtl-202</V> <V>Mtl-203</V> </V> </value> </data> </dataset> |
|
投稿日時: 2006-03-07 19:37
Google検索結果の「USERS GROUP : [XML:01451] Re: ノード名の変数代入」に
情報があるようです。 (通常のリンクからは行けないようなので、キャッシュを読んでみてください) Google検索結果 キーワード「xslt ノードリストへ評価」 http://www.google.co.jp/search?q=xslt+%E3%83%8E%E3%83%BC%E3%83%89+%E3%83%AA%E3%82%B9%E3%83%88%E3%81%B8%E8%A9%95%E4%BE%A1&start=0&hl=ja&lr=lang_ja&ie=utf-8&oe=utf-8&client=firefox&rls=org.mozilla:ja:official [ メッセージ編集済み 編集者: 悠 編集日時 2006-03-07 19:51 ] |
|
投稿日時: 2006-03-08 11:09
XMLSpy内蔵の XSLTエンジンで xslt2.0 の指定では、何か動きます
<value xmlns:fn="http://www.w3.org/2004/10/xpath-functions" xmlns:xdt="http://www.w3.org/2004/10/xpath-datatypes" xmlns:xs="http://www.w3.org/2001/XMLSchema" id="$vname">JOB-10</value> <value xmlns:fn="http://www.w3.org/2004/10/xpath-functions" xmlns:xdt="http://www.w3.org/2004/10/xpath-datatypes" xmlns:xs="http://www.w3.org/2001/XMLSchema" id="$vname"> <Mtl>Mtl-201</Mtl> <Mtl>Mtl-202</Mtl> <Mtl>Mtl-203</Mtl> </value> ============= xslt2.0発行直前ですから、メジャーなxsltプロセッサは 実装入っています (簡単な部分は使えるかも、+自己責任) ======================== 簡単な解決(ソリューションと言い替ええてもいい)のポイントは 「カレントノード」 の意識です、./ が付いたパラメータを渡すのはオカシイ 呼び出された側のカレントは呼び出した側のが、「引き継がれます」 従って、パラメータは全く不要です。 $変数の部分を ./name や ./value に書き換えるだけ、行数も減る。 [ メッセージ編集済み 編集者: MMX 編集日時 2006-03-08 11:29 ] |
|
投稿日時: 2006-03-08 16:47
ご回答ありがとうございました。参考にさせていただきます。
|
1