プロが教えるわが家の防犯対策術!

XMLスタイルシートのtemplateタグは、以下のように書きますよね。
(xmlns:xsl="http://www.w3.org/1999/XSL/Transform"が宣言されているとする)

<xsl:template match="myns:example">
</xsl>

しかしこうすると、myns接頭辞のタグのみしかマッチしません。
どんな接頭辞でもマッチするようにしたかったので、

<xsl:template match="*:example">
</xsl>

としてみましたが、スタイルシートがコンパイルできないと言われてしまいます。

何か方法ないでしょうか。
あるいは何も方法がないのであれば、そのような意見もお願いします。

A 回答 (1件)

これでいいのかは自信がない


==============Q3477885-1.xml(適用するXML)======================
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="Q3477885.xsl" type="text/xsl" ?>
<foo>
<bar xmlns="himajin100000">へんなやつ(終帝)</bar>
<bar xmlns="himajin200000">キャット</bar>
<bar xmlns="himajin300000">エンリケ</bar>
<bar xmlns="himajin400000">マールバラ</bar>
<baz xmlns="himajin500000">カプリコーン</baz>
</foo>
==============Q3477885-1.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="xml" encoding="UTF-8" omit-xml-declaration="no" indent="yes" />
<xsl:template match="/">
<funya>
<xsl:apply-templates />
</funya>
</xsl:template>

<xsl:template match="*[local-name() = 'baz']" />

<xsl:template match="*[local-name() = 'bar']">
<fuga><xsl:value-of select="./text()" /></fuga>
</xsl:template>

</xsl:stylesheet>

=================Q3477885-2.xml(結果)==================
<?xml version="1.0" encoding="UTF-8"?>
<funya>
<fuga>へんなやつ(終帝)</fuga>
<fuga>キャット</fuga>
<fuga>エンリケ</fuga>
<fuga>マールバラ</fuga>
</funya>
    • good
    • 0
この回答へのお礼

わざわざご丁寧にXML、XSLT、そして結果まで載せて頂いちゃって。。

一応すべてのの名前空間のタグに対して操作することは可能なようですね。
ただし、templateタグの中でfor-eachするときにも、select="*[local-name()=element]'"といった感じで記述しないとマッチしてくれないみたいですね・・。

しかし答えとしては、「無理」というのを期待していて、無理ならしょうがないかーあきらめようと思っていたので、うれしい結果に終わってよかったと思っています。
himajin1000000さん、ありがとうございました。

お礼日時:2007/11/01 09:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!