2010-05-06 29 views
4

Comment puis-je obtenir la valeur d'un attribut appelé xlink:href d'un nœud XML dans un modèle xsl?Obtenir l'attribut xml nommé xlink: href en utilisant xsl

Je possède ce nœud 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> 

Lorsque je tente le xsl suivant, je reçois une erreur disant "Prefix 'XLink' est pas défini." :

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

Lorsque je tente cet attribut simple, il fonctionne:

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

Bonne question (1). Voir ma réponse pour une solution alternative. :) –

Répondre

7

Vous devez déclarer l'espace de noms XLink dans votre XSLT avant de pouvoir le référencer.

Vous pouvez l'ajouter à l'élément xsl:value-of:

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

Cependant, si vous allez avoir besoin de faire référence dans d'autres domaines de votre feuille de style, il serait alors plus facile de le déclarer au sommet dans l'élément de document de votre XSLT:

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

Soit dit en passant, vous n'avez pas besoin d'utiliser le même préfixe d'espace de noms dans votre feuille de style comme ce qui est utilisé dans votre XML. Le préfixe d'espace de noms est simplement utilisé comme raccourci pour l'URI de l'espace de noms. Vous pouvez déclarer et utiliser l'espace de noms XLink comme ceci:

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

Je vais avec l'inclusion dans l'élément supérieur, car je vais potentiellement utiliser plus d'une place dans le xls. – awe

3

Alors que @ Mads Hansen a fourni une bonne réponse, il est bon de savoir que il y a une autre façon de noms de référence qui sont dans un espace de noms :

Dans ce cas, vous pouvez également l'attribut acces avec l'expression XPath suivante:

DCPType/HTTP/Get/OnlineResource/@* 
      [namespace-uri() = 'http://www.w3.org/1999/xlink']