Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

get xml attribute named xlink:href using xsl

How can I get the value of an attribute called xlink:href of an xml node in xsl template?

I have this xml node:

<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>

When I try the following xsl, I get an error saying "Prefix 'xlink' is not defined." :

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

When I try this simple attribute, it works:

<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@test" />
like image 229
awe Avatar asked May 06 '10 08:05

awe


2 Answers

You need to declare the XLINK namespace in your XSLT before you can reference it.

You could add it to the xsl:value-of element:

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

However, if you are going to need to reference it in other areas of your stylesheet, then it would be easier to declare it at the top in the document element of your XSLT:

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

Incidentally, you don't need to use the same namespace prefix in your stylesheet as what is used in your XML. The namespace prefix is just used as shorthand for the namespace URI. You could declare and use the XLINK namespace like this:

<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@x-link:href"  xmlns:x-link="http://www.w3.org/1999/xlink"/>
like image 61
Mads Hansen Avatar answered Oct 24 '22 11:10

Mads Hansen


While @Mads-Hansen has provided a good answer, it is good to know that there is an alternative way to reference names that are in a namespace:

In this case, you could also acces the attribute with the following XPath expression:

   DCPType/HTTP/Get/OnlineResource/@*
            [namespace-uri() = 'http://www.w3.org/1999/xlink']
like image 33
Dimitre Novatchev Avatar answered Oct 24 '22 11:10

Dimitre Novatchev