Xpath ロケーションパス(開発メモ)

<p>aaaaaaaaaaaaaaaa<graphic src=”インライン用画像”/>bbbbbbbbbbbbbbbbb</p>
<p><graphic src=”通常画像”/></p>

上記のようなXMLがあった場合にXSLTスタイルシートでPタグ中のテキスト部とgraphicタグ部を
分割して処理させる。しかし、同じグラフィック要素でもインライン用の用途と通常画像用の
グラフィック要素が存在している。

この場合、スタイルシート側では同じgraphicテンプレートでインライン用の処理と
通常用の画像処理を定義してやらなければならない。

この分岐をするためにXPath で ロケーションステップを書く時に以下の
工夫が必要だった。

following-sibling::text()
preceding-sibling::text()

この書き方でgraphicタグの前や後ろにテキストノードがあった場合は
インライン用の画像処理をするという命令を定義した。しかし、
following-sibling::text()はうまく動作するものの、なぜか
preceding-sibling::text()は動作しない・・・。(プロセッサはXerces)

<xsl:when test=”parent::node()/child::text() != ””>
この定義でまかなおうとするがこれでもダメ
<xsl:when test=”normalize-space(parent::node()/child::text()) != ””>
前後のスペースをトリムしたらうまく動作する。なぜ・・・。苦労した・・・。