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

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

2005/08/14

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

第10回

修飾されていないのはXSLのテンプレートを適用できていない為、要素の中にある文字列だけが見えている状況だと思ってほしい。

前回までで、apply-templatesを空呼びするのは文字を表示する為と説明していたと思うがそれと同じ現象が出ているだけだ。

よく考えてみてほしい、前回までの<A>タグは無名の<A>で、今回の<A>はhttp://xxx.example.com/という名前がついている。
いわば<A>ではなく、<http://xxx.example.com/A>と思ってもらった方が理解は早いだろう。

XSLの方を見てもらえればわかると思うが、http://xxx.example.com/という名前空間に関する配慮がまったく無い。
そこで<A>をきちんと認識するようにしてみたい。

xsl:stylesheetの行を以下のように変更してみてほしい。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
 xmlns="http://xxx.example.com/">

これで、このXSLも同じ名前空間に存在するようになる・・・・・かのように見える。
しかしこれはうまく行かない。

なぜうまく行かないのだろう。
XSLファイルは自身もXMLの形式になっている。

ここで、xmlns宣言をすると自分自身の(XSLファイル)名前空間を宣言するだけになってしまう。
なので、適用するXMLファイルの名前空間を利用可能にするのは

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
 xmlns:me="http://xxx.example.com/">

このようにxmlns:meと別名をつけることになる。
:より後ろが別名部分だ。

以後me:とつけるとhttp://xxx.example.com/のを書いていることになる。

<me:A>と書くとhttp://xxx.example.com/さんの<A>タグという意味になる。

これをXSLに適用すると。

a.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
 xmlns:me="http://xxx.example.com/">
<xsl:output method="text" />                  

<xsl:template match="/"><xsl:apply-templates /></xsl:template>

<xsl:template match="me:A">A[<xsl:apply-templates />]A</xsl:template>
<xsl:template match="me:NAME">NAME[<xsl:apply-templates />]NAME</xsl:template>
<xsl:template match="me:INT">INT[<xsl:apply-templates />]INT</xsl:template>
</xsl:stylesheet>                  

このようになって結果は

結果.txt
A[NAME[名前]NAMEINT[20]INT]A

このように無事適用される。
#私は1週間くらい悩みましたよー。えー。

[戻る] [進む]


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

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

ブログ本家
広告