- PR -

XSLTで困っています。

1
投稿者投稿内容
Rika
会議室デビュー日: 2005/01/06
投稿数: 16
投稿日時: 2005-11-14 20:02
XML文書をHTML形式に変換するXSLTを作成中です。

以下のようなXML構造がについて、type属性が"B"のtoc-item要素の変換処理を、兄弟要素にtype属性"A"のtoc-item要素が存在する場合と、存在しない場合に分岐させたいと思っています。

[XML構造]
 <toc>
 <toc-item type="A"></toc-item>
 <toc-item type="B"></toc-item>
  <toc-item type="B"></toc-item>
  <toc-item type="B"></toc-item>
 </toc>

type属性"B"のtoc-item要素の変換を行っているときに、ほかのtoc-itemの属性値を調べるにはどのような処理を行えばよいのでしょうか?

MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-11-14 21:28
親に上がってから下がる
"../toc-item/@type = 'A'"
とか
2.2 基準点
http://www.infoteria.com/jp/contents/xml-data/REC-xpath-19991116-jpn.htm#axes
"preceding-sibling::toc-item/@type = 'A'"

-- 未テスト
type B の処理に入る前に、/toc-item[@type = 'A'] を 変数に入れておくと
type B の for-each が少し速くなるか? XSLTプロセッサの最適化能力は?

[ メッセージ編集済み 編集者: MMX 編集日時 2005-11-14 21:35 ]
Rika
会議室デビュー日: 2005/01/06
投稿数: 16
投稿日時: 2005-11-14 23:30
MMXさま、すばやいご返答ありがとうございます。

親に上がってから下がる手法をとってみたところ、どうにかうまくいきそうです。
ただ、Aの出現位置が不明なので、条件文が長くなりそうなのがネックです。
少なくともBよりは前に出るので、Aが出た時点でフラグを立てておいて、B変換時にその値を参照したりできればいいんですが、変数を別々のtoc_item変換で共有する方法がよくわからなくて困っています。

XSLTプロセッサはMSXML4.0を使用しています。
初心者のため、最適化能力とかはわからないんですが…。
またなにかよい方法がありましたら、ご教授願います。
1

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