ルート要素がデフォルトのネームスペース属性を持っていないときにxsltの動作に特有の違いが発生しました。
この違いがなぜ発生するのでしょうか。xsl:テンプレートの一致属性:デフォルトネームスペースに関連する方法
XML入力が
<root>
<content>xxx</content>
</root>
次の変換が適用される場合
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:apply-templates/>
</root>
</xsl:template>
<xsl:template match="content">
<w>x</w>
</xsl:template>
</xsl:stylesheet>
結果が期待
<?xml version="1.0" encoding="UTF-8"?>
<root>
<w>x</w>
</root>
であるが、同じ変換が
に適用した場合であります<root xmlns="http://test.com">
<content>xxx</content>
</root>
結果が異なっており、単にデフォルトのテンプレート(効果的に出力テキストノード値「XXX」)の申請に基づき、次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<root>xxx</root>
追加
これは正常な動作である場合にはこの場合、2番目のケースのcontent
要素に一致させるためには、どの一致属性値が必要ですか?
少し予期していませんが、もう一度疑問があります:2番目のケースではどのように 'content'要素に一致しますか? – Maestro13
fyi要素を名前空間に一致させるには、いくつかの方法があります。 1つの方法は、あなたのXSL宣言にそれを加えることです。つまり、 '"です。この場合、テンプレートの一致ステートメントを ''に変更する必要があります。テンプレートマッチステートメントを '' –
user1263226
に変更するだけでよいのですが、最後の文章ではアポストロフィ、すなわち 'content' – user1263226