- - PR -
違う2つのファイルのの要素と属性が一致したら・・・
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 ] |
|
投稿日時: 2002-12-26 23:13
井上です。
Document() 関数を使って、Document('XML1.xml')/ex1/name などとやる方法では駄目ですか ? |
|
投稿日時: 2002-12-26 23:25
あくまでも一致したらなので
ifなどかなと思ったので documentと絡めてやってみたのですがうまくいきませんでした。 ところでifを使うとき <xsl:if test="A='B'">と書きますよね。 このときA、Bをex1/name, document('XML2.xml')//ex2/@NAMEなどとするとエラーが起きます。 Bは「○」とか「□」といった厳密な値でないといけないのでしょうか? どこかから参照するというようなことは無理なのでしょうか? |
|
投稿日時: 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> |
|
投稿日時: 2002-12-31 00:14
これで光が見えてきました。
ありがとうございましたm(__)m |
1