XSLTで文字列の取得方法について

このQ&Aのポイント
  • XSLTを使用して、文字列の一部を変数に格納する方法を調べています。具体的には、文字列の後ろの部分を抽出したいです。現在、substring-after関数を使用して試していますが、変数への参照が解決できないエラーが発生しています。
  • Win2000+MSXML+IE6の環境で作業しています。XSLTを使用し、文字列の後ろの部分を変数に格納する方法について教えてください。現在、substring-after関数を試してみましたがエラーが発生しています。
  • XSLTという言語を使用し、文字列の一部を変数に格納したいです。具体的には、文字列の後ろの部分を取得する必要があります。しかし、現在は変数への参照が解決できないというエラーが発生しています。ご教授いただければ幸いです。
回答を見る
  • ベストアンサー

文字列の取得

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

  • XML
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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&TID=3922&F=0&L=10&R=1#M3922

関連するQ&A

  • XSLTでtest.xmlファイルのccc要素の値を取得する場合は以下

    XSLTでtest.xmlファイルのccc要素の値を取得する場合は以下(1)、(2)のようにやればいいのですが、(2)の箇所のパス(testを)動的(可変)にすることはできるのでしょうか? (1)document関数によりxmlファイルを変数に格納  <xsl:variable name="aaa" select="document('test.xml')"/> (2)上記変数からパスを指定して値を取得  <xsl:variable name="bbb" select="$aaa/test/ccc"/> test.xml <test> <ccc>bbb</ccc> </test> 例)以下は間違ってると思いますがパスに変数を使用して値を取得することは可能でしょうか?   <xsl:variable name="ccc" select="'test'"/> // 変数cccにtestという文字列を格納   <xsl:variable name="bbb" select="$aaa/$ccc/ccc"/> //test/cccがパスのつもり

    • 締切済み
    • XML
  • XSL中の改行、タブを無効にしたい。

    XMLドキュメントにXSLを適用すると XSL中の改行やタブがそのまま反映されてしまいます。 改行を無くすと1行が長くなってしまい編集が大変で困っています。 どうしたらよいのでしょうか? XSL: <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet xml:space="default" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"> <xsl:output method="text" /> <xsl:template match="/"> <xsl:for-each select="//z:row"> <xsl:choose> <xsl:when test="(@MACHINE='DELL')"> </xsl:when> <xsl:when test="(@MACHINE='APPLE')"> </xsl:when> <xsl:when test="(@MACHINE='HP')"> </xsl:when> <xsl:otherwise> <xsl:value-of select="@MACHINE" />, <xsl:value-of select="substring(@PARTS_NO,1,1)" />-<xsl:value-of select="substring(@PARTS_NO,2,3)" />-<xsl:value-of select="substring(@PARTS_NO,5,3)" />-<xsl:value-of select="substring(@PARTS_NO,8,2)" />,<xsl:value-of select="@STATUS" />,<xsl:value-of select="@STOCK_NUM" /><xsl:text>&#xA;</xsl:text> <xsl:if test="not(@MACHINE=following-sibling::z:row/@MACHINE)"> <xsl:text>,&#xA;</xsl:text> </xsl:if> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> </xsl:stylesheet>

    • ベストアンサー
    • XML
  • xsl内の変数計算方法とパラメータ取得方法

    xsl+xml+cssを使い、1ページに一定数の画像を表示させ、 ページングさせるxslを作っています。 わからないことは (1)変数の計算方法について  ページの先頭表示データを以下のように定義しました。  <xsl:variable name="TopData" select="1" /> nextボタン押し下げ時に1ページ先の先頭表示データを以下のように計算したいのですが、  <xsl:variable name="TopData" select="$TopData=$TopData+$PageData" />  画面にfalseと表示されてしまいました。  また、backボタン押し下げ時に1ページ前の先頭表示データを以下のように計算したのですが、  ブラウザにエラーが表示されてしまいました。  <xsl:variable name="TopData" select="$TopData=$TopData-$Page" /> (2)urlのパラメータを取得する方法について  nextボタンを以下のように記述しました。 <a href="photo.xml?TopData={$TopData}"> <img width="30" height="30" src="img/aaa.gif" /> </a>  ここで与えたパラメータを、同じxlstファイルで取得し、  値を使うにはどのように記述したらよろしいでしょうか? ご教授おねがいいたします。

    • ベストアンサー
    • XML
  • xmlの複数条件で検索

    <xsl:choose> <xsl:when test="@エリア='新宿'"> <td><xsl:value-of select="@エリア"/></td> <td><xsl:value-of select="店名"/></td> <td><xsl:value-of select="スープ"/></td> <td><xsl:value-of select="住所"/></td> <td><xsl:value-of select="TEL"/></td> </xsl:when> <xsl:when test="スープ='醤油'"> </xsl:when> </xsl:choose> この時求めるのは場所が『新宿』、スープが『醤油』の複数の条件を指定して、検索させたいのですがどうすればよろしいでしょうか?いまいち<xsl:choose>~の使い方が分かりません。アドバイスお願いします。 ラーメン屋のデータ  1 場所=新宿 スープ=味噌  2 場所=恵比寿 スープ=醤油  3 場所=札幌 スープ=味噌  ・  ・ とこんなかんじであったとして・・・

    • ベストアンサー
    • XML
  • IEのmsxmlでxmlをcsvに変換

    現在IEにくっついているmsxmlでxmlファイルをcsvに変換させるxslを作成しています。 msxmlでもmsxml3でも動くようなxslファイルを作成したいので ワーキングドラフト仕様のxslの記述を使用しようと思い下記のようなXMLとxslを作成しました <?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="CSV.XSL"?> <root> <data> <record> <aaaa>1234</aaaa> <bbbb>5678</bbbb> <cccc>9abc</cccc> <dummy name="ENDRECORD"></dummy> </record> <record> <aaaa>1122</aaaa> <bbbb>3344</bbbb> <cccc>5566</cccc> <dummy name="ENDRECORD"></dummy> </record> </data> </root> xslのposition()が使えないので xmlに <dummy name="ENDRECORD"></dummy> を追加して xslで一件分のデータの終わりを認識させています -csv.xsl- <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" version="1.0"> <xsl:template match="/"> <xsl:apply-templates select="root/data/record"/> </xsl:template> <xsl:template match="root/data/record"> <xsl:for-each select="*"> <xsl:choose> <xsl:when test="./@name[(.='ENDRECORD')]">&#xA;</xsl:when> <xsl:otherwise><xsl:value-of select="."/>,</xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> </xsl:stylesheet> しかし、csvのカンマ編集が以下のようになってしまいます。 1234,5678,9abc, ←最後にカンマが残ってしまう 1122,3344,5566, どなたかワーキングドラフト仕様でも勧告後の仕様でも動くような、csvに変換するxslを作成された方はいませんでしょうか。

    • ベストアンサー
    • XML
  • 2stepをくりかえす方法を教えてください。

    XML初心者です。 1つ目は赤、2つ目は青、3つ目は赤、4つ目は青・・・という繰り返し処理を行う場合、どのように書けば良いのか教えてください。 以下のようなものを考えてるのですが・・・よく分かっていませんので、全く的外れかもしれません。 <xsl:for-each select="hoge"> <xsl:choose> <xsl:when test="?????"> 赤 </xsl:when> <xsl:when test="?????"> 青 </xsl:when> </xsl:choose> </xsl:for-each>

    • ベストアンサー
    • XML
  • xsl:variableでの抽出条件の変更

    こんにちは、Khazadと申します。  xsl:variableで、xsl:apply-templates の抽出条件を変更したくて 下記のようなXSLを作成したのですが、うまくいきません。  原因がわかる方。または別の方法があればご教授お願いできないでしょうか?  パーサーはMSXML3.0です。 (試したこと) 1 テンプレート内に<xsl:value-of select='$frid'/>を挿入すると、   ちゃんと1が表示されます。 2 [@rid='{$frid}']の部分を[@rid='$frid']に変更しても抽出は   行われません。 3 [@rid='{$frid}']の部分を[@rid='1']にすると抽出されます。  以下XSLのソースです -------------------------------------------------------- <xsl:variable name = 'frid' select='1' ></xsl:variable> <xsl:template match="/"> <xsl:apply-templates select="ROOT//*[@rid='{$frid}']"/> </xsl:template> <xsl:template match="*[@rid='{$frid}']"> <xsl:apply-templates select="*"/> </xsl:template> --------------------------------------------------------

    • ベストアンサー
    • XML
  • xslで変数をxpathに使いたい

    初めて、質問させていただきます。よろしくお願いします。 早速ですが、xslの中で、 <xsl:variable name="hensu">名前</xsl:variable> のように、変数を宣言し、その変数を、xpathとして以下のように使いたいのですが このままでは、文字列(名前)で表示されてしまいます。 <xsl:value-of select="$hensu" /> 変数をxpathに変換する方法はありますでしょうか?

    • 締切済み
    • XML
  • 違う階層のテンプレートの変数を参照する方法を教えてください。

    以下のようにテンプレートAAAにある$naをテンプレートBBBから参照し、変数$nbをつくりたいと思っております。 いろいろと試して四苦八苦しております。 XSL初心者です、どなたかご教示願います。 ----------------------------------------------- <xsl:template match="AAA">  <xsl:variable name="na"><xsl:value-of select='@value' /></xsl:variable> </xsl:template> <xsl:template match="BBB"> <xsl:variable name="nb"><xsl:value-of select="$na" /></xsl:variable> </xsl:template>

    • ベストアンサー
    • XML
  • xsl:for-each関数の回転数を変数でカウントしたい

    いろいろと調べて、XSLTではxsl:variableとparamを使って変数を使えるようなのですが、これらは変更は出来ないようですね(paramはちょっと違うようですが)。 xsl:for-each関数の回転数を変数でカウントするといった使い方をしたいのですが、変数の値が変えれない為に実現できません。 代わりの方法か変数の値を変えられる方法を知っている方はいらっしゃいますか?

    • 締切済み
    • XML

専門家に質問してみよう