- PR -

XSLのfor-eachについて

1
投稿者投稿内容
Angler
ベテラン
会議室デビュー日: 2004/12/21
投稿数: 56
投稿日時: 2004-12-27 15:37
この前のスレッドでカラムを4つに分けて・・・という質問をした者です。

先の件と同様、カラムを4つに分けて表示させる帳票のようなものを
作成しているのですが、その中に表を表示させたいと思っています。

今、for-eachを使ってXML中に繰り返される数の行の表を作成しているのですが
その中に「カラム1で50行を過ぎたら51行目からはカラム2に」とか、
場合によっては「カラム1で50行を過ぎたら51行目からはカラム4に」とか
いう処理を追加したいのですが、for-each内でこのような事は可能でしょうか?
度々、申し訳ないのですがよろしくお願いします。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-12-27 17:54
for-each 行
value-of select="floor((position()-1+50) div 50)"/
/for-each
position 関数で 現在行番号はわかります、
あとは、 if や choose で振り分けに行けます。

XSL-FO では 領域の高さでも 指定して 行数に枠をかけれる、かも。

[ メッセージ編集済み 編集者: MMX 編集日時 2004-12-27 17:56 ]
Angler
ベテラン
会議室デビュー日: 2004/12/21
投稿数: 56
投稿日時: 2004-12-27 21:19
MMXさま。

いつもありがとうございます。本当に助かってます。
今、教えていただいた
value-of select="floor((position()-1+50) div 50)"/
を使い、いろいろ試しています。

場合分け方法として、
<if test="floor((position()-1+50) div 50)='1'/>
等でテンプレートごとに分ける処理は思いついたのですが、
(アホな質問で申し訳ないですが・・・)
value-of select="floor((position()-1+50) div 50)"/
これだとどうしても表上に1や2や3と表示されてしまうのですが
これを表示させなくする(中身での処理にする)
にはどのようにすればよろしいですか?

本当、お恥ずかしい限りですがよろしくお願い致します。
Angler
ベテラン
会議室デビュー日: 2004/12/21
投稿数: 56
投稿日時: 2004-12-28 12:04
まだここの処理に関して悩んでいるのですが・・・。

for-each中で繰り返しを抜ける処理ってありませんか?
exitは無いですよね・・・。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-12-28 17:29
>これを表示させなくする(中身での処理にする)
choose のtest で参照するだけですみます。
段番号を 何回も参照するなら、variable に入れると使えます。

>for-each中で繰り返しを抜ける処理ってありませんか?
exitは無いですよね・・・。
大域脱出はありません。if で空回しするしかできません。

ここが逐次実行のイメージの手続き型発想です、
一度再検討が必要です、できると、プログラムの幅が広がります。

適当に書いて、質問をするより、じっくり簡単なサンプル
を多数、読むほうが効率がよい、学習時期と思います。

分からないときは全部展開で書いてもよいでしょう
HTML 風サンプル

DIV
DIV 1段目
for-each lines[(position() > 0) and (51 > position() )]
/DIV
DIV 2段目
for-each lines[(position() > 50) and (101 > position() )]
/DIV
/DIV

XSLTを使うには、縦形探索ぽい、それぞれの枝が独立しているイメージをしてください。

その他
1.再帰呼び出し、
2.パターンマッチ→実行部の push 処理
3.for-each でランダムアクセスでの pull 処理
などXSLT は多彩な顔を持っています。

Lisp,Yacc,Prolog などもカリキュラムでやっておくと
使うことは一生ないですが、XSLTなどに当たっても平常心を保てます。

XSLT2.0 では かなり逐次的な味付けが導入されます,
手続き言語発想の人々にも「やや」やさしくなるでしょう。
先行実装版も 出ています、(ソフト間の競争もあるので勧告発行と同時にリリースになるでしょう、たぶん。
XSLT1.0でマイナーなソフトは 2.0発行の切れ目でアピールのチャンスがある)

追加参考 XSLT 2 対 XQuery
XQueryは、XSLTの宣言的性格と精神的に非互換性の人々によって歓迎されました。
同時に、XSLT信者は、XSLTが既にできることのためのカスタム・シンタックスとしてXQueryを知覚して、
▲ XSLTの実行意味論に なじめないと感じたなら、XQuery を待ちましょう、βも見つかります。
http://www.xml.com/lpt/a/2004/12/29/deviant.html
翻訳サイトに投げ込むと読めます。
(言語にデータモデルを統合する課題は色々です、言語+XMLとか 言語+RDB とか)
-------------- 新作いろいろ
Berkeley DB XML 2.0 Now Available!
http://www.sleepycat.com/products/xml.shtml
============================================== 今日の発見
【 JoSQL 】perform SQL-like queries on a collection of Java Objects.
http://josql.sourceforge.net/
発想はXQuery ぽいものがある、

SELECT <要素名> FROM <XMLファイル> WHERE <XPath式>;

なら使いたいでしょうか?

[ メッセージ編集済み 編集者: MMX 編集日時 2005-01-07 11:58 ]
1

スキルアップ/キャリアアップ(JOB@IT)