получить атрибут xml с именем xlink: href, используя xsl - PullRequest
5 голосов
/ 06 мая 2010

Как я могу получить значение атрибута с именем xlink:href узла xml в шаблоне xsl?

У меня есть этот 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" />

Ответы [ 2 ]

10 голосов
/ 06 мая 2010

Вам необходимо объявить пространство имен XLINK в XSLT, прежде чем вы сможете ссылаться на него.

Вы можете добавить его к элементу 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"/>
3 голосов
/ 06 мая 2010

Хотя @ Mads-Hansen дал хороший ответ, полезно знать, что существует альтернативный способ ссылки на имена, которые находятся в пространстве имен :

В этом случае вы также можете получить доступ к атрибуту со следующим выражением XPath:

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