中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

XMLってなぁに?(第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週間くらい悩みましたよー。えー。

投稿日時 : 2004年9月27日 0:03

コメントを追加

# re: XMLってなぁに?(第10回) 2004/09/27 10:41 みゃみゅ玉子

あー・・・これ僕もかなり悩みました。(涙)
<aaa:bbb>~</aaa:bbb>ってあったら、単純に
<xsl:template match="aaa:bbb">~</xsl:template>
でいけるのかと思ってて、取れないから
「ひょっとして”aaa:”いらないのか?」
とか思ったりしてました。(爆)

ネームスペースってやつを理解してなかったからわかんなくなるんですよね。
# でも、まだ完全に理解したわけではなかったり・・・

タイトル
名前
URL
コメント