получите атрибут XML, названный xlink:href с помощью xsl

Как я могу получить значение названного атрибута 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" />
5
задан Mads Hansen 6 May 2010 в 11:26
поделиться

2 ответа

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

Вы можете добавить его в элемент xsl:value-of:

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

Однако, если вам понадобится ссылаться на него в других областях вашей таблицы стилей, то проще будет объявить его в самом верху в элементе document вашего 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"/>
10
ответ дан 18 December 2019 в 14:43
поделиться

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

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

   DCPType/HTTP/Get/OnlineResource/@*
            [namespace-uri() = 'http://www.w3.org/1999/xlink']
3
ответ дан 18 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: