「XMLStyleSheet」の編集履歴(バックアップ)一覧はこちら
「XMLStyleSheet」(2008/10/03 (金) 16:04:43) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
・XMLをXSLで表示するには2つの手順が必要
①XML文書を変換(transformation)
②書式情報を与える(formating)
→XSLFOとCSSがあるがXSLFOは高度なため普及していない
・XSLスタイルシート:XML文書をどのように変換するのかという情報(.xsl)
・XSLスタイルシート全体は整形式XML文書の形をとる
・XSLの名前空間には「http://www.w3.org/1999/XSL/Transform」を使う
・XSLスタイルシートのルート要素には「xsl:stylesheet」を使う
・テンプレートルール:XML文書を変換するためのルール
①XML文書の「どの部分」を →パターン
②「どのように」変換するのか →テンプレート
・スタイルシートの中では「文書」に当てはまるテンプレートルールが一番最初に選択される
・<xsl:output method="xml" encoding="文字コード"/>
↓ →結果文書の文字コードを指定
→結果文書の形式を指定
*結果に付け加えられるXML宣言となる
・テンプレ-ト内は原則として上から順に処理される
・<xsl:apply-templates select="文書"/>
→ここの処理に飛ぶ
・CSS:レイアウトを指定、テキストエディタで作れる(.css)
------------CSSの指定-----------------------------
セレクタ{
属性1:値1; 属性1の書式を値1にする
属性2:値2;
}
--------------------------------------------------
・セレクタ:XML文書のどの部分に書式情報を与えるのか
・CSSの属性(property):セレクタに対してどの部分の書式を与えるか
---------------CSSの属性----------------------------------------
display 基本となる表示形式を指定
margin 余白を指定する
border-color 境界線の色を指定する
border-style 境界線のスタイルを指定する
border-width 境界線の太さを指定する
text-align テキストの位置を指定する
text-indent テキストの字下げを指定する
line-hight 行送りを指定する
font-family 使用するフォントを指定する
font-size 文字のサイズを指定する
font-weight 文字の太さを指定する
color 色を指定する
background-attachement 背景をスクロールするか指定する
background-color 背景の色をしえ治する
background-image 背景の画像を指定する
----------------------------------------------------------------
・CSSを与える:<?xml-stylesheet type="text/css" href="Sample.css"?>
・<?と?>で囲まれた指定を処理命令(PI)と呼ぶ
・CSSを利用したスタイルシートには以下の文章が必要
<xsl:processing-instruction name="xml-stylesheet">
type"text/css" href="Sample.css"
</xsl:processing-instruction>
XPath
-------ルートノードから指定する(絶対位置指定)-------------
① / ルートノード
② /要素名A ルート要素A
③ /要素名A/要素名B ②の子である要素B
④ //要素名C 文書内のすべての要素C
⑤ /要素名A/要素名B/@属性D ③の属性D
----------------------------------------------------------
・カレントノード:現在処理中のノード
-------カレントノードから指定する(相対位置指定)-----------
⑥ . カレントノード
⑦ 要素名E ⑥の子である要素E
⑧ 要素名E/要素名F ⑦の子である要素F
⑨ 要素名E//要素名G ⑦の子の要素G
⑩ 要素名E/@要素名H ⑦の子の属性H
----------------------------------------------------------
・<xsl:copy-of select="式"/>
→式で指定したノード以下をコピーする
・<xsl:value-of select="式"/>
→式で指定したノード以下をテキストに変換
・<xsl:copy> カレントノードだけをコピー
・「*」(ワイルドカード)を記述すると、すべての名前を表すことができる
・XPathの式の最後の部分に[]をつけてノードを絞り込むことができる
<xsl:apply-templates select="cars/car[2]"/>
→2番目の「car」要素だけ処理する
---------XPathの演算子-----------------
= イコール
!= ノットイコール
> >
>= >=
< <
<= <=
---------------------------------------
・「xsl:element」要素などを使って、要素を作成できる
<xsl:element name="car">日本車</xsl:element>
・属性を追加
<xsl:attribute name="company">カーバンク社</xsl:attribute>
・テキストを追加
<xsl:text>車のデータです。</xsl:text>
・合計を計算
<xsl:value-of select="sum(price)"/>
→価格の合計を計算
・データの数を数える
<xsl:value-of select="count(car)"/>
→ノード数を数える
--------XPathの関数------------------------------------------------------------------------
round(数値) 数値に最も近い整数を返す
floor(数値) 数値に最も近い数値より小さい整数を返す
ceiling(数値) 数値に元も近い数値より大きい数値を返す
sum(式) 式で指定されたノードの集合を数値にして合計値を返す
last() カレントノードの集合の個数を返す
position() カレントノードの集合の中での現在のノード位置を返す
count(式) 式で指定したノードの集合の個数を返す
string-length(文字列) 文字列の長さを返す
substring(文字列1、数値1、数値2) 文字列から、「数値1」の位置より後ろの文字を
「数値2」個分抜き出して返す
starts-with(文字列1、文字列2) 文字列1が文字列2で始まれば真を返す
contains(文字列1、文字列2) 文字列1が文字列2が含まれれば真を返す
translate(文字列、文字リスト1、文字リスト2)
文字列の中の文字リスト1を文字リスト2に
置換したものを返す
-------------------------------------------------------------------------------------------
・XPathの式はロケーションステップと呼ばれる単位から成り立っている
→軸、ノードテスト、述語
---------------軸:基準となるノードとの関係を示すもの------------------
self:: カレントノード自身
child:: 子
parent:: 親
decendant:: 子孫
ancestor:: 先祖
decendant-or-self:: 子孫とカレントノード自身
ancestor-or-self:: 先祖とカレントノード自身
preceding-sibiling:: 兄
following-sibiling:: 弟
preceding:: カレントノードの前
following:: カレントノードの後
attribute:: 属性
namespace:: 名前空間
------------------------------------------------------------------------
---------ノードテスト:ノードの名前または種類を指定---------------------
node() すべてのノード
comment() コメントノード
text() テキストノード
processing-instruction() 処理命令ノード
------------------------------------------------------------------------
述語:ノードの絞込みをする条件。[]でくくって指定する
---------簡易表記-------------------------------------------------------
詳細 範囲 意味
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
child: (指定なし) 子
self::node() . カレントノード
parent::node() .. 親
attribute:: @ 属性
[position()=数値] [数値] ノードの順序
------------------------------------------------------------------------
--------XSLの主な要素と属性---------------------------------------------------------------
xsl:comment コメントを作成する
xsl:processing-instruction name="式" 式で指定したターゲット名を持つ処理命令を作成する
xsl:if test="式" 式の条件が成り立つときに処理する
xsl:choose,xsl:when,xsl:otherwise 場合分けして処理する(下に詳細)
xsl:for-each select="式" 式で指定された複数のノードを繰り返して処理する
xsl:sort select="式" 式を手がかりにソートをする
xsl:number 番号を振る
xsl:variable name="式" 式で指定した名前の変数を定義する
------------------------------------------------------------------------------------------
xsl:when →要素の条件が成り立つ場合(if)
xsl:otherwise →whenの条件が成り立たない場合(else)
-------xsl:sort要素の属性----------------------------------
select="XPathの式" 式の値で並べ替える
data-type="number" 数値として並べ替える
="text" テキストとして並べ替える
order="ascending" 昇順
="descending" 降順
(無指定だとascending)
-----------------------------------------------------------
---------xsl:number要素の主な属性--------------------------------------------------
label="single" 章番号のように番号を振る
="multiple" 「章、節、項」のように番号を振る(上のレベルの番号もつける)
="any" 登場順に番号を振る
(省略した時はsingle)
count="XPathの式" カウントするノードを指定する
(省略した時はカレントノードと同じパターン)
from="XPathの式" カウントを始めるノードを指定する
format="番号の形式"
1 1,2,3
A A,B,C
ア ア、イ、ウ
value="XPathの式" 独自の数値とする
------------------------------------------------------------------------------------
<xsl:variable name="名前"/>
・・・
</xsl:variable>
・・・
<xsl:copy-of select="$名前"/> 上の"名前"の中身をさす
<xsl:value-of select="$名前"/>