XPathとXSLTの関数 【文字列関数】 concat

2004年01月18日(日)更新


concatで文字列をつなげる

たけち: 今回は 前回(contains)の続きで、xpathの文字列操作関数のひとつ、concatの使い方をサンプルで勉強しようね。

さらら: concat(コンキャット)?? なんだか、狐と猫が合わさったような名前ね。

たけち: さらら・・・・・・・ (ー ー;

さらら: あっ、concatって?


concat

たけち: concatって、「つなげる」って言う意味のconcatenationの略なんだよね。この関数は、文字列をつなげて、ひとつの文字列にしてくれるんだよ。

concat(文字列-1, 文字列-2, ・・・・)
",(カンマ)"で区切って指定した文字列をくっつけて一つにします。

さらら: あっ、そうなの。でも、実際どんな風に使うのかしら・・・・

たけち: そうだね。この文字列関数だけ示されても、ちょっと使い方がイメージしにくいかもね。じゃあ、さっそく、万葉集の例で使い方を図にしておくね。

concatの説明図

たけち: 図でわかるように、concatでは、指定した文字列やXMLテキスト中の指定したノードの文字列をひとつの(長い)文字列にしてくれるんだよね。

さらら: あぁ、そうなのね。でも、このconcatをどこで使うの?

たけち: そうだね。実際のXSLスタイルシートでは、このconcatだけ単独に使うわけじゃないから、ちょっと使い方がいま一つイメージしにくいかもね。


<xsl:value-of select="concat(文字列,文字列)" />のサンプル

たけち: よく使われるのが、

  • <xsl:value-of select="concat(文字列,文字列)" />
のパターンだね。

さらら: あぁ、そうなのね。XMLからのテキスト(文字列)と別のテキスト(文字列)をつなげて表示したいときに使うってことなのね。

たけち: そうそう。じゃぁ、今回は、前回のサンプルの一部をconcatを使ってやってみよう。XMLテキストはいままでと同じだよ。

xmlデータ

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="contains.xsl"?>
<manyosyu>
  <poem url="m0007.html" pno="7">
    <mkana>金野乃 美草苅葺 屋杼礼里之 兎道乃宮子能 借五百礒所念</mkana>
    <poet>額田王(ぬかたのおおきみ)</poet>
    <yomi>秋の野の、み草刈り葺(ふ)き、宿れりし、宇治の宮処(みやこ)の、仮(かり)廬(いほ)し思ほゆ</yomi>
    <image>image/m0007.jpg</image>
    <mean>秋の野のみ草を刈って屋根を葺(ふ)いて、泊まった宇治(うじ)の宮処(みやこ)の仮の宿のことを思い出します。</mean>
    </poem>

・・・・・途中省略してます・・・・・

  <poem url="m0037.html" pno="37">
    <mkana>雖見飽奴 吉野乃河之 常滑乃 絶事無久 復還見牟</mkana>
    <poet>柿本人麻呂(かきのもとのひとまろ)</poet>
    <yomi>見れど飽かぬ、吉野の川の、常滑(とこなめ)の、絶ゆることなく、またかへり見む
    </yomi>
    <image>image/m0037.jpg</image>
    <mean>何度見ても飽きることの無い吉野の川の常滑(とこなめ)のように、絶えること無く何度も何度も見にきましょう。</mean>
  </poem>

</manyosyu>

たけち: 次に、前回のXSLサンプルでXMLテキスト中の文字列と固定の文字列を続けて書いている個所を、今回concatを使ってどんな風に指定するかを乗せておくね。

concatに変更する個所

さらら: あっ、こうやって使うのね。

たけち: じゃあ、変更後のXSLスタイルシートを次に載せるね。

XSLTスタイルシート

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

<xsl:template match="/">
  <html>
  <head>
  <title>たのしいXML: XSLサンプル</title>
  <link rel="stylesheet" type="text/css" href="manyo.css" />
  </head>

  <body>
  <p align="center">万葉集第1巻抜粋: concatで文字列をつなげる</p>

  <xsl:apply-templates />

  </body>
  </html>
</xsl:template>

<xsl:template match="poem">

<table border="0" width="500" align="center">
  <tr>
  <th>
  <a>
  <xsl:attribute name="href"><xsl:value-of select="concat('http://www6.airnet.ne.jp/manyo/main/one/', @url)" /></xsl:attribute>
  <xsl:value-of select="concat('歌番号: ', @pno)" /></a>
  </th>
  <th><xsl:value-of select="concat(poet, 'の歌')" /></th>
  </tr>
  <tr>
  <td colspan="2">
  <xsl:value-of select="concat('読み: ', yomi)" />
  </td>
  </tr>
  <tr>
  <td><xsl:value-of select="mean" /></td>
  <td>
    <img><xsl:attribute name="src"><xsl:value-of select="image" /></xsl:attribute></img>
  </td>
  </tr>
</table>

</xsl:template>

</xsl:stylesheet>

さらら: このXSLTでの表示は、たのしい万葉集のページへのリンクも生成しているのね。

たけち: そうだね。じゃあ、このXSLTスタイルシートを"concat.xsl"というファイルにして、実際にどうなるか見てみようね。次のテキストをクリックしてみて。

万葉集第1巻抜粋のXMLファイル concat.xml(上記説明のXML/XSL適用)

万葉歌を表示

さらら: そうかぁ・・・・concatの使い方は分かったわ。

たけち: よかった。じゃあ、今回はこれでおしまい。

さらら: はい。

→次はcontainsです。。。 (^ ^;