- PR -

XSLTでXMLを正規化されたDB表のように使いたい

1
投稿者投稿内容
ウラタン
常連さん
会議室デビュー日: 2003/07/25
投稿数: 29
投稿日時: 2003-09-11 19:00
お疲れさまです。
xml+xsltでわからないことがあるのです。

------------------ xml --------------------
<dataset>
<list1>
<address position="あっち" tel="110">yokohama</address>
<address position="こっち" tel="104">osaka</address>
<address position="そっち" tel="110">tokyo</address>
</list1>

<list2>
<people>
<name>サップ</name>
<address>tokyo</address>
</people>
<people>
<name>佐竹</name>
<address>osaka</address>
</people>
<people>
<name>羽山</name>
<address>osaka</address>
</people>
<list2>
</dataset>
-----------------------------------------

このような2つに正規化?されたデータ集合で、片方(=人間)の
表を作りつつ、addressが合致するlist2要素の属性を拾ってくる
ことはできるでしょうか?
要は、同じデータを複数持ちたくないのです。(この場合はtel)

--------------------- xsl --------------------------
<xsl:for-each select="list2">
<tr>
<td><xsl:value-of select="name" /></td>
<td><xsl:value-of select="../list1[@@@@@]/address/@tel" /></td>
</tr>
</xsl:for-each>
----------------------------------------------------

こんな感じで、[@@@@@]の部分を色々と試してみたのですが、うま
くできませんでした。
[../list1/address=address]
こんな感じの構文でできるのでしょうか?
それとも、もっと工夫が必要なのでしょうか?

ゆう
常連さん
会議室デビュー日: 2003/06/27
投稿数: 45
投稿日時: 2003-09-12 09:00
 for-eachはあまり使ったことがないので、templateで変換
してみました。以下のような結果でよいのでしょうか?

--------------------- 結果 --------------------------
サップ 110
佐竹 104
羽山 104
--------------------- 結果 --------------------------

--------------------- xsl --------------------------
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<table>
<xsl:apply-templates select="dataset/list2/people"/>
</table>
</xsl:template>

<xsl:template match="people">
<xsl:variable name="addr" select="address"/>
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="//list1/address[. = $addr]/@tel" /></td>
</tr>
</xsl:template>
</xsl:stylesheet>
--------------------- xsl --------------------------

 for-eachでも、繰り返しの対象をpeopleにすれば同じよう
な結果が得られると思います。
 もっと良い方法もあるかと思いますが、とりあえずご参考
までに。
ウラタン
常連さん
会議室デビュー日: 2003/07/25
投稿数: 29
投稿日時: 2003-09-12 09:15
>悠氏

レスありがとうございます。
いい感じです、助かりました。

最近xslt始めたのですが、結構面白くて使いでがありそうだな、
と感じています。
次は、このxmlをSAXで通そうと思っています。

ではでは、ありがとうございました。
1

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