基本は
基準点::ノードテスト[述語]
で表される。
但し,基準点は省略が可能で、
<xsl:value-of select="child::book" /> は
<xsl:value-of select="book" /> と同意義になる。
通常、基準点はコンテキスト(現在)ノードの子要素を対象にする事がほとんどであるので、省略形の方を用いるものが多い。
基準点
| 基準点 |
概要 |
例(→省略形) |
| child |
コンテキストノードの全ての子を選択。 |
child::feeds/child::feed (→ feeds/feed ) |
| attribute |
コンテキストノードの属性を選択。属性ノードの順序は決められていない。 |
feed/attribute::name (→ feed/@name ) |
| self |
コンテキスト(現在)ノード自身を選択。 |
self::node() (→ . ) |
| parent |
コンテキスト(現在)ノードの親要素を選択。 |
parent::node()/parent::node()/attribute::name (→ ../../@name ) |
| descendent |
コンテキスト(現在)ノードの子孫であるノードを全て選択。 |
descendent::node() |
| ancestor |
コンテキスト(現在)ノードの祖先であるノードを全て選択。 |
ancestor::node() |
| preceding-sibling |
コンテキスト(現在)ノードの兄であるノードを全て選択。 |
preceding-sibiling::meeting (コンテキストノードがmeeting要素である前提で、それより前にあるmeeting要素を探す) |
| following-sibling |
コンテキスト(現在)ノードの弟であるノードを全て選択。 |
following-sibiling::meeting (コンテキストノードがmeeting要素である前提で、それより後にあるmeeting要素を探す) |
| preceding |
コンテキスト(現在)ノードより文書順で前にあるノードを全て選択。 |
preceding::author (先行する全てのauthor要素を取得) |
| following |
コンテキスト(現在)ノードより文書順で後にあるノードを全て選択。 |
following::author |
| descendent-or-self |
コンテキスト(現在)ノードの全ての子孫である全てのノードと、コンテキストノード自身を選択。 |
self::node()/descendent-or-self::node()/child::feed (→.//feed ) |
| ancestor-or-self |
コンテキスト(現在)ノードの全ての祖先である全てのノードと、コンテキストノード自身を選択。 |
|
| namespace |
コンテキスト(現在)ノードの名前空間属性を選択 |
ノードテスト
| ノードテスト |
概要 |
| comment() |
コメントノードのみ選択 |
| node() |
全てのノードを選択 |
| text() |
テキストノードのみ選択 |
| processing-instruction() |
あるターゲットを持つ処理命令だけを選択 ( descendant::processing-instruction('java') ) |
述語
基準点とノードテストで特定されたノード集合に対して、さらにフィルタをかけます。
基本的にには[〜]で囲まれた 式 から構成され、式は true or false を返します。
例えば、child::feed[position()=8] の場合は、8番目のfeed要素が 式にて true が返されるために
8番目のfeed要素が 戻り値にて返ります。
[〜]の式は、xPathの組込み関数などを使用し構成します。
以下は、使用する特殊記号と関数になります。
特殊記号
| 特殊記号 |
概要 |
例 |
| / |
直下の要素 |
feed/name <feed>要素直下の<name>要素 |
| // |
全ての子孫 |
event//name <event>要素直下の全<name>要素 |
| . |
現在の要素 |
./name コンテキストノード直下の<name>要素 |
| * |
すべての子要素 |
feed/* <feed>要素直下の全要素 |
| @ |
属性名の接頭辞 |
feed/@id <feed>要素直下のid属性 |
| : |
名前空間セパレータ |
<name xml:lang="ja">
|
関数
| ノードセット関数 |
概要 |
戻り値 |
例 |
| count(node-set) |
ノードセットの数を返す |
number |
count(feed[@author='aqubi'])
author属性が'aqubi'である<feed>要素の数を返します |
| document(node-set) |
指定されたノードの値が示す外部XML文書へのアクセス手段を提供する |
node-set |
cokument(@href)//feed
href属性の値がfeed.xmlならば、feed.xml内の全<feed>要素にマッチ |
| id(node-set) |
ノードを一意に識別するIDから要素を抽出する |
node-set |
id(generate-id(feed))//child::name
<geed>要素は以下の<name>要素にマッチ |
| key(strName,varValue) |
<xsl:key>要素で定義されたキーstrNameを値varValueで検索し、合致したノードを返す |
node-set |
<xsl:key>を参照 |
| last() |
マッチしたノードセットのノード数を返す |
number |
feed/author[last()] |
local-name(node-set?)
|
マッチしたノードセットのローカル部分のみを返す
|
String
|
local-name()
|
name(node-set?)
|
指定されたノードセットの名前全体を返す
|
String
|
name()
|
namespace-uri(node-set?)
|
指定されたノードセットの名前空間URIを返す
|
String
|
namespace-url()
|
position()
|
親要素から見たとき何番目の子ノードであるかを返す
|
number
|
child::name[position()=3]
3番目の<name>要素を返す
|
| 文字列関数 |
概要 |
戻り値 |
例 |
concat(string, string...)
|
指定文字列を連結する
|
string |
concat('aqu', 'bi')
'aqubi'を返す
|
contains(string1, string2)
|
string1がstring2を含んでいる場合trueを返す |
boolean |
contains(string(feeds/feed), 'Happy')
feed要素の文字列が Happyを含んでいればtrueを返す
|
normalize-space(string?)
|
文字列の前後からスペースをとった文字列を返す |
string |
normalize-space(' aqubi ')
'aqubi'が返る。
|
start-with(string1, string2)
|
string1がstring2の文字列で始まっていたらtrueを返す
|
boolean
|
|
string(node-set?)
|
指定オブジェクトを文字列に変換する
|
string |
|
string-length(string?)
|
文字の長さを返る
|
number
|
|
substring(string, start-number, length)
|
stringのstart-number文字目からlength文字分を抜き出し
|
string
|
|
substring-after(string1, string2)
|
string1をstring2で区切った時、その後半部にあたる部分を返す
|
string
|
|
substring-before(string1, string2)
|
string1をstring2で区切った時、その前半部にあたる部分を返す
|
string
|
|
translate(string1, string2, string3)
|
string1をstring2からstring3の変換規則に従って、変換した文字を返す
|
string
|
translate(string(feed), 'xml', 'XML')
|
| bool関数 |
概要 |
戻り値 |
例 |
| boolean(node-set) |
nodeをbooleanに変換する
|
boolean |
|
false()
|
falseを返す
|
boolean |
|
lang(string)
|
コンテキストノードのxml:lang属性が指定された言語と等しければ、もしくは指定された文字列を含んでいれば、trueを返す
|
boolean
|
|
not(boolean)
|
引数がtrueならばfalse, falseならばtrueを返す
|
boolean
|
|
true()
|
trueを返す
|
boolean |
|
| 数値型関数 |
概要 |
戻り値 |
例 |
| ceiling(number) |
指定された数値より小さくない最小の整数を返す
|
number |
ceiling(-3.5)
-3を返します
|
floor(number)
|
指定された数値より大きくない最大の数値を返す
|
number |
floor(-3.5)
-4を返します
|
number(node-set)
|
引数のオブジェクトを数値に変換する
|
number |
|
round(number)
|
指定された数値を四捨五入した値を返す
|
number
|
|
sum(node-set)
|
指定された数値の合計を返す
|
number |
|
| XSLT関数 |
概要 |
戻り値 |
例 |
| current() |
コンテキスト(現在)ノードを返す
|
node-set |
|
element-available(string)
|
指定された名前が現在のXSLTプロセッサで使用可能であるかどうかを返す
|
boolean |
|
format-number(number, string1, string2?)
|
数値numを指定された書式 string1, string2 に変換して返す
|
string |
format-number(29.62,'0.0')
29.6を返す
format-number(5800, '#,###')
5,800を返す
|
function-available(string)
|
指定された関数が使用できるかどうかを返す
|
string
|
|
generate-id(node-set?)
|
ノードを一意に識別するidを返す
|
string |
|
system-property(string)
|
指定された文字列のシステムプロパティを返す
引数には以下の文字を設定します。
xsl:version ... XSLTのバージョン
xsl:vendor ... Parserを提供しているベンダ名
xsl:vendor-url ... ベンダのURL
ms:xml:version ... Parserのバージョン
|
string
|
|
unparsed-entity-uri(string)
|
|
string
|
|
|
|