倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

XPath 1.0 のコア関数 (4) : 文字列関数 (String Functions)

XPath 1.0 のコア関数(記事一覧)。 今回は残りの XPath 関数、文字列関数を見ていきます。 XPath 1.0 仕様書「4.2 String Functions」参照。

関数のシグニチャ

関数名 シグニチャ 返り値の型 説明
string() string(object?) string XPath 1.0 でのデータ型のキャスト」参照
concat() concat(string, string, string*) string 引数の文字列を連結した文字列を返す
start-with() starts-with(string, string) boolean 第1引数の文字列が第2引数の文字列で始まっているかどうかを返す
contains() contains(string, string) boolean 第1引数の文字列が第2引数の文字列を含むかどうかを返す
substring-before() substring-before(string, string) string 第1引数の文字列のうち、第2引数の文字列以前の部分文字列を返す
substring-after() substring-after(string, string) string 第1引数の文字列のうち、第2引数の文字列以降の部分文字列を返す
substring() substring(string, number, number?) string 第1引数の文字列に対して、第2、第3引数に応じて部分文字列を返す
string-length() string-length(string?) number 引数の文字列の長さを返す
normalize-space() normalize-space(string?) string 引数の文字列の空白を正規化して返す
translate() translate(string, string, string) string 第1引数の文字列に第2、第3引数に応じて置き換えを施す

string() 関数


以前の記事を参照。
シグニチャ

string(object?) : string

concat() 関数


引数の文字列を連結した文字列を返す。
シグニチャ

concat(string, string, string*) : string

サンプルの XPath

concat("gr", "ooo", "vy")

サンプルの評価結果

"grooovy" (文字列)

starts-with() 関数


1引数の文字列が第2引数の文字列で始まっているなら true を、そうでないなら false を返す。
シグニチャ

starts-with(string, string) : boolean

サンプルの XPath

starts-with("grooovy", "gr")

サンプルの評価結果

true (ブール値)

contains() 関数


第1引数の文字列が第2引数の文字列を含むなら true を、そうでないなら false を返す。
シグニチャ

contains(string, string) : boolean

サンプルの XPath

contains("grooovy", "ooo")

サンプルの評価結果

true (ブール値)

substring-before() 関数


第1引数の文字列のうち、第2引数の文字列以前の部分文字列を返す。 もう少し正確には

  • 第1引数の文字列に対して、第2引数の文字列が最初に現れた位置以前の部分文字列を返す。

  • 第1引数の文字列が第2引数の文字列を含んでいないなら、空文字列を返す。


シグニチャ

substring-before(string, string) : string

サンプルの XPath

substring-before("grooovy", "ooo")

サンプルの評価結果

"gr"

substring-after() 関数


第1引数の文字列のうち、第2引数の文字列以降の部分文字列を返す。 もう少し正確には

  • 第1引数の文字列に対して、第2引数の文字列が最初に現れた位置以降の部分文字列を返す。

  • 第1引数の文字列が第2引数の文字列を含んでいないなら、空文字列を返す。


シグニチャ

substring-after(string, string) : string

サンプルの XPath

substring-after("grooovy", "ooo")

サンプルの評価結果

"vy" (文字列)

substring() 関数


第1引数に対して、第2引数が指定する位置から第3引数が指定する長さだけ取り出した部分文字列を返す。

  • 第3引数が省略された場合は、第2引数が指定する位置から第1引数の最後までの部分文字列を返す。

  • 文字列を指定する位置は1から始まる。


シグニチャ

substring(string, number, number?) : string

サンプルの XPath

substring("grooovy", 2)
substring("12345", 1.5, 2.6)
substring("12345", 0, 3)
substring("12345", 0 div 0, 3)
substring("12345", 1, 0 div 0)
substring("12345", -42, 1 div 0)
substring("12345", -1 div 0, 1 div 0)

サンプルの評価結果

"rooovy" (文字列)
"234" (文字列)
"12" (文字列)
"" (文字列)
"" (文字列)
"12345" (文字列)
"" (文字列)

string-length() 関数


引数の文字列の長さを返す。 引数が省略された場合は、コンテキスト・ノードの文字列表現(string() 関数による変換)が引数として渡される。
シグニチャ

string-length(string?) : number

サンプルの XPath

string-length("grooovy")

サンプルの評価結果

7 (数値)

normalize-space() 関数


引数の文字列の空白を正規化して返す。 正規化とは以下の操作をいう:

  • 最初と最後の空白文字列を除去する

  • 文字列中の空白文字列は1つのスペースで置き換える


引数が省略された場合は、コンテキスト・ノードの文字列表現(string() 関数による変換)が引数として渡される。
シグニチャ

normalize-space(string?) : string

サンプルの XPath

normalize-space(" gr ooo vy ")

サンプルの評価結果

"gr ooo vy" (文字列)

translate() 関数


第1引数の文字列に対して、第2引数に含まれる文字が現れた際に、その文字を第3引数の対応する位置にある文字で置き換えた文字列を返す。

  • 第2引数の文字に対応する第3引数の文字がない(第2引数の文字列が第3引数の文字列よりも長い)場合、その第2引数の文字と一致する第1引数の文字は除去される。

  • 第2引数に同じ文字が複数回現れた場合、最初の出現(位置)が置き換える文字を定める。

  • 第2引数よりも第3引数の方が長い場合、その長い部分は無視される。


シグニチャ

translate(string, string, string) : string

サンプルの XPath

translate("grooovy", "grvy", "GRVY")
translate("grooovy", "ooo", "o")
translate("--aaa--", "abc-", "ABC")

サンプルの評価結果

"GRoooVY" (文字列)
"grooovy" (文字列)
"AAA" (文字列)

2つ目のサンプルは変換されない。

入門XML

入門XML