BLOGTIMES
2014/05/23

XSLT でテキストノードの出力を止めるには

  xml 
このエントリーをはてなブックマークに追加

久々にちょっと xsl を書いたらビルトインテンプレートの部分でハマってしまったので、忘れないようにメモ。

XSLT には仕様にビルトインテンプレートというものが含まれているので、特に何も書かなくてもテキストノードの部分は最終結果に出力されます
これについては 5.8 Built-in Template Rules で下記のように書かれています。

5.8 Built-in Template Rules - XSL Transformations (XSLT)

There is also a built-in template rule for text and attribute nodes that copies text through:
<xsl:template match="text()|@*"> <xsl:value-of select="."/> </xsl:template>

場合によってはこの挙動が邪魔なことがあるのですが、このビルトインテンプレートを削除することはできません。ただし、このビルトインテンプレートは他のすべてのテンプレートよりも優先順位が低く設定されているので、明示的にルールを上書きすれば無効化することはできるようになっています*1。そんなわけで、こんな感じのルールをテンプレートに付け足して事なきを得ました。

<xsl:template match="text()|@*" />
  • *1: The built-in template rules are treated as if they were imported implicitly before the stylesheet and so have lower import precedence than all other template rules. Thus, the author can override a built-in template rule by including an explicit template rule.

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/6736
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン