- PR -

違う2つのファイルのの要素と属性が一致したら・・・

1
投稿者投稿内容
MASA
会議室デビュー日: 2002/12/26
投稿数: 3
投稿日時: 2002-12-26 22:56
例えば、
[XML1.xml]
...
<ex1>
<name>○</name>
<price>100</price>
</ex1>
<ex1>
<name>□</name>
<price>200</price>
</ex1>
...

[XML2.xml]
...
<ex2 NAME="○">
<code>001</code>
<type>A</type>
</ex2>
<ex2 NAME="□">
<code>002</code>
<type>B</type>
</ex2>
...

という2つのファイルがあります。
[XML1.xml]ex1/nameと[XML2.xml]ex2/@NAMEが一致したときに、
[XML2.xml]ex2/codeとex2/typeを表示したい、という場合は
どのようにXSLを書けばよいのでしょうか?
keyを使えばよいのでしょうか?

国語力が無く分かりにくいとは思いますが、
どなたか教えていただけると幸いです。

[ メッセージ編集済み 編集者: MASA 編集日時 2002-12-26 23:00 ]
井上孝司
ぬし
会議室デビュー日: 2001/09/08
投稿数: 668
お住まい・勤務地: 東京都
投稿日時: 2002-12-26 23:13
井上です。

Document() 関数を使って、Document('XML1.xml')/ex1/name などとやる方法では駄目ですか ?
MASA
会議室デビュー日: 2002/12/26
投稿数: 3
投稿日時: 2002-12-26 23:25
あくまでも一致したらなので
ifなどかなと思ったので
documentと絡めてやってみたのですがうまくいきませんでした。

ところでifを使うとき
<xsl:if test="A='B'">と書きますよね。
このときA、Bをex1/name, document('XML2.xml')//ex2/@NAMEなどとするとエラーが起きます。
Bは「○」とか「□」といった厳密な値でないといけないのでしょうか?
どこかから参照するというようなことは無理なのでしょうか?
井上孝司
ぬし
会議室デビュー日: 2001/09/08
投稿数: 668
お住まい・勤務地: 東京都
投稿日時: 2002-12-27 02:07
井上です。
なんか勘違いしてしまったようで、失礼しました。

直接、双方のノードの値を比較せずに、いったん変数に入れてあげるとうまくいくみたいですね。以下の例では HTML として出力させて、ブラウザで結果を見られるようにしてあります。
xml1.xml をダブルクリックして、IE で開いてみてください。(要 MSXML3)

[xml1.xml]
<?xml-stylesheet type="text/xsl" href="xsl1.xsl"?>
<xdoc>
<ex1>
<name>○</name>
<price>100</price>
</ex1>
<ex1>
<name>□</name>
<price>200</price>
</ex1>
</xdoc>

[xml2.xml]
<xdoc>
<ex2 NAME="○">
<code>001</code>
<type>A</type>
</ex2>
<ex2 NAME="□">
<code>002</code>
<type>B</type>
</ex2>
</xdoc>

[xsl1.xsl]
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<HTML>
<BODY>

<xsl:for-each select="xdoc/ex1">
<xsl:variable name="VAL1" select="name"/>
<xsl:for-each select="document('xml2.xml')/xdoc/ex2">
<xsl:variable name="VAL2" select="./@NAME"/>
<xsl:value-of select="$VAL1"/> = <xsl:value-of select="$VAL2"/><BR/>
<xsl:if test="$VAL1 = $VAL2">
<xsl:value-of select="code"/>, <xsl:value-of select="type"/><BR/>
</xsl:if>
<HR/>
</xsl:for-each>
</xsl:for-each>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
MASA
会議室デビュー日: 2002/12/26
投稿数: 3
投稿日時: 2002-12-31 00:14
これで光が見えてきました。
ありがとうございましたm(__)m
1

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