中の技術日誌
 ホーム / 上へ

XMLってなぁに? 初級編 第14回

2005/08/14

この文書は執筆時点(2004/後半)での知識を基にしており、現状とあっていない可能性があります。

第14回

前回の結果をおさらいしてみよう

問い:全店舗の商品一覧を取得するxslを考えてみよう。
現在の結果:
東京店HDDレコーダCDプレイヤー大阪店HDDレコーダCDプレイヤーPC

不必要な店名が入ってしまっているのが問題だ。
これはなぜ入っているのだろうか。

ここで思い返してほしい、最初にXSLが登場したときにvalue-ofは紹介せずに<apply-templates>だけを行えば、要素のテキスト情報(テキストノード)が出力されるといった趣旨の説明をした。(第4回の最後)

テキストノードは存在するのに、何の手当てもされない要素に対して適用されるテンプレートがデフォルトで適用される。

<xsl:template match="text()">
  <xsl:value-of select="." />
</xsl:template>

それがこういうテンプレートだ。ここでいうtext()はテキストノードを意味する。
またvalue-ofの"."は現在の適用対象のテキストノード自身である。

自動でこのようなテンプレートが適用されるのだとすると、このテンプレートを使わないようにすればいい。

<xsl:template match="text()" />

このような1行を追加すれば、無事未処理の要素のテキストノードは無視される。

a.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="/ROOT/店舗/在庫">
 <xsl:for-each select="商品">
  <xsl:value-of select="text()" />
 </xsl:for-each>
</xsl:template>
<xsl:template match="text()" />
</xsl:stylesheet>
結果.txt
HDDレコーダCDプレイヤーHDDレコーダCDプレイヤーPC

参照:
text() XPath1.0 2.3章 ノードテスト
デフォルトのテンプレート XSLT1.0 5.8章 組み込みテンプレートルール

[戻る] [進む]


勉強会: 05/18 大阪 登録受付中

中の技術日誌
コンテンツ
わんくま同盟
わんくま同盟
わんくま同盟
広告
バナー
MVP LOGO
MSMVP Visual C# Since 2004/04-2007/03
MCP LOGO
070-316
姉妹サイト
姉妹サイト:じゃんぬのC#, VB.NET 入門
じゃんぬの
C#, VB.NET 入門
検索
Google

ブログ本家
広告