5

xlink:hrefxslテンプレートのxmlノードで呼び出された属性の値を取得するにはどうすればよいですか?

私はこのxmlノードを持っています:

<DCPType>
 <HTTP>
  <Get>
   <OnlineResource test="hello" xlink:href="http://localhost/wms/default.aspx" 
      xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" />
  </Get>
 </HTTP>
</DCPType>

次の xsl を試すと、「プレフィックス 'xlink' が定義されていません」というエラーが表示されます。:

<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@xlink:href" />

この単純な属性を試してみると、うまくいきます:

<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@test" />
4

2 に答える 2

11

参照する前に、XSLT で XLINK 名前空間を宣言する必要があります。

xsl:value-ofそれを要素に追加できます:

<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@xlink:href" xmlns:xlink="http://www.w3.org/1999/xlink" />

ただし、スタイルシートの他の領域で参照する必要がある場合は、XSLT のドキュメント要素の先頭で宣言する方が簡単です。

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:xlink="http://www.w3.org/1999/xlink">

ちなみに、XML で使用されているものと同じ名前空間プレフィックスをスタイルシートで使用する必要はありません。名前空間プレフィックスは、名前空間 URI の省略形として使用されます。次のように XLINK 名前空間を宣言して使用できます。

<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@x-link:href"  xmlns:x-link="http://www.w3.org/1999/xlink"/>
于 2010-05-06T11:25:47.470 に答える
4

@ Mads-Hansenは良い答えを提供しましたが、名前空間にある名前を参照する別の方法があることを知っておくのは良いことです。

この場合、次のXPath式を使用して属性にアクセスすることもできます。

   DCPType/HTTP/Get/OnlineResource/@*
            [namespace-uri() = 'http://www.w3.org/1999/xlink']
于 2010-05-06T13:04:33.357 に答える