私が得ることのできないXSLマッチングの規則については何かがあります。奇妙なXSLマッチングの振る舞い
私は、この入力をした:私が望むように、このXSL作品
<root>
<metadata>
</metadata>
<elements>
<a-elems>
<a>A1</a>
<a>A2</a>
</a-elems>
<b-elems>
<b>B1</b>
<b>B2</b>
</b-elems>
</elements>
</root>
、<a>
値のリストが報告されています
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:template match = "/">
_____ Elements _____
<xsl:apply-templates select = "root/elements/*/*" />
</xsl:template>
<xsl:template match = "a-elems/a">
__ A ELEM: <xsl:value-of select = "."></xsl:value-of> __
</xsl:template>
<xsl:template match="*">
<xsl:message>Excluding <xsl:value-of select = "name(.)" /></xsl:message>
</xsl:template>
</xsl:stylesheet>
しかし、私は私は述べる。このルートテンプレートを、考えます私が始めたいレベルは、よりきれいになります:
<xsl:template match = "/root/elements">
_____ Elements _____
<xsl:apply-templates select = "*/*" />
</xsl:template>
しかし、うまくいきません「ルートを除外する」メッセージが表示され、テンプレートが一致しないことがわかりました。私はなぜ、私はまた、試してみました= "*"と優先度の属性を追加しました。
ありがとう。私は動作するアプローチを使用します。それは練習するということは、常に '/'を再定義する必要があるということですか?私は、あなたがトップレベルの下のfeewサブツリーにしか関心がないとき、それが奇妙であると感じます。 – zakmck
'/'を必ずしも再定義する必要はありません。私はちょっとしたバリエーションを使って答えを編集しました。 –