- PR -

XSLTでの相互参照

1
投稿者投稿内容
ベル
会議室デビュー日: 2008/01/08
投稿数: 7
投稿日時: 2008-03-05 14:15
XML文章をHTMLへ変換するXSLTを開発しておりますが、処理方法をどのようにするか困っています。

以下のようなXMLがあったとします。

コード:

<root>
<nameList>
<name>john</name>
<name>smith</name>
<name>michael</name>
<name>steve</name>
</nameList>
<paramList>
<param name="michael">param1</param>
<param name="john">param2</param>
<param name="steve">param3</param>
<param name="smith">param4</param>
</paramList>
</root>



やりたいことは
nameListからnameを順次取り出していく過程で、name要素の値とマッチするparamList/param/@nameの要素を取り出したい
です。

実行
@nameListから1番目のnameの値を取り出す->john
AparamList/param/@nameから@にマッチする要素を特定-><param name="john">param2</param>
BAの値を取得->param2
C@〜BをnameListのnameがなくなるまで繰り返す

上記XMLを使用して実行した結果が
param2
param4
param1
param3
となるようにしたいのですが、XSL上どのように書けばよいのか分かりません。

xsl:for-each等を使用しようとも考えましたが、xsl:for-eachが入れ子になり、軸が変わってしまうのでnameList、paramListを相互に参照しながら処理が出来ないのではないか、と悩んでいます。

XMLの構造を変更してしまえばいいのですが、現状それも出来ない状態です。

どなたかお分かりの方いらっしゃいましたらアドバイスをお願い致します。

開発環境
WindowsXP Professional SP2
Xalan 2.7.0
JDK1.5.0_12

[ メッセージ編集済み 編集者: ベル 編集日時 2008-03-05 14:17 ]

[ メッセージ編集済み 編集者: ベル 編集日時 2008-03-05 14:19 ]
想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2008-03-05 17:18
コード:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <xsl:apply-templates />
  </xsl:template>
  
  <xsl:template match="root">
    <xsl:for-each select="nameList/name">
      <xsl:variable name="name" select="." />
      <xsl:value-of select="$name" />
      =
      <xsl:value-of select="../../paramList/param[@name=$name]" />
      <br />
    </xsl:for-each>
  </xsl:template>
  
</xsl:stylesheet>


適当ですがこんな感じでどうでしょうか。
ベル
会議室デビュー日: 2008/01/08
投稿数: 7
投稿日時: 2008-03-05 18:07
想馬さん

ご返信ありがとうございました。
無事に解決しました!
1

スキルアップ/キャリアアップ(JOB@IT)