2012-02-16 4 views
3

私はテンプレートを持っている:XSLT:XPathでデフォルト名前空間の接頭辞を取り除くにはどうすればよいですか? (のxmlns = "...")

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="urn:jboss:domain:1.1" 
    xmlns:d="urn:jboss:domain:1.1" 
      > 

... 

<xsl:template match="//d:interfaces/d:interface[@name='management']/d:inet-address"> 
    ... 
</xsl:template> 

これは動作します。

<xsl:template match="//interfaces/interface[@name='management']/inet-address"> 
    ... 
</xsl:template> 

デフォルトの名前空間が設定されているにもかかわらず、これが機能しないのはなぜですか?

答えて

4
<xsl:template match="//interfaces/interface[@name='management']/inet-address"> 
    ... 
</xsl:template> 

私はデフォルトの名前空間を設定しているにもかかわらず、これは動作しないのはなぜ?

これは、XSLTおよび/またはXPathのリストに関するよくある質問の1つです。

XPathは、既定の名前空間が定義されスコープ内に存在する可能性があるという事実にかかわらず、接頭辞なしの名前を「名前空間なし」に属するものとして扱います。

W3C XPath 1.0 specificationを引用する:。

"がノード・テストでAのQNameは、式コンテキストから 名前空間宣言を使用して展開名に展開されている。この拡張は同じ 方法であります xmlnsで宣言されたデフォルト名前空間が使用されていないことを除いて、 の要素タイプ名に対して行われます。 QNameに接頭辞がない場合、名前空間URIはNULL "

したがって、上記のテンプレートルールは "名前空間なし"の要素に一致しますが、XML文書の要素は"urn:jboss:domain:1.1"名前空間にあります。したがって、単一のノードは上記の規則に一致しません。

+0

ありがとうございました。私は尋ねる前に仕様を読んだが、説明はあまりにも非論理的で、私はそれを理解していないと思った。今私は私がしたのを見る。 –

+0

@OndraŽižka:どうぞよろしくお願いいたします。 –

関連する問題