電子書籍の厳選無料作品が豊富!

XSLTで、次のような文字列の後ろの部分だけを変数に入れたいのですが、どうすればよいでしょうか?

1または2 → 2
3 → 3

<xsl:choose>
<xsl:when test="contains(val,'または')=true()">
<xsl:variable name="data" select="substring-after(val,'または')"/>
・・・・・・
のようにしてみましたが、
変数またはパラメータ 'data' への参照が解決できません。変数またはパラメータが定義されていないか、スコープにない可能性があります。
というエラーになってしまいました。

よろしくお願いします。

環境:Win2000+MSXML+IE6

A 回答 (1件)

sample.xml



<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="huga.xsl"?>
<PAGE>
<person>
<name>himajin100000または暇人拾万。ぶっちゃけどっちでもいいや</name>
</person>
<person>
<name>架空人物</name>
</person>
</PAGE>

huga.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://purl.org/himajin100000/" version="1.0">
<xsl:output method="xml" encoding="Shift_JIS"/>

<xsl:template match="/">
<my:hoge>
<xsl:apply-templates/>
</my:hoge>
</xsl:template>

<xsl:template match="person">
<xsl:choose>
<xsl:when test="contains(name,'または')=true()">
<xsl:variable name="data" select="substring-after(name,'または')"/>
<!--ここで宣言したdataの変数の有効範囲はここから-->

<xsl:value-of select="$data" />


<!--変数の有効範囲はここまで。変数でも関数でも有効範囲のことをプログラミング用語で「スコープ」と言います。-->
</xsl:when>
<xsl:otherwise>
<!-- ためしにコメント外して見てね。スコープ外で変数を使ってみると・・・・
<xsl:value-of select="$data" />
-->
処理
</xsl:otherwise>
</xsl:choose>
</xsl:template>


</xsl:stylesheet>

#でもXSLTの変数って後から変更されるような仕様になっていないので(思想の問題だったと思う。文献を探すのが面倒くさいので探さないが)-->

#あんまり見てないし役に立つかどうか知らないが、もしかしたら参考になるかもよ?
http://www2.xml.gr.jp/log.html?MLID=xmldesign&TI …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!