Как я могу получить значение названного атрибута 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" />
Вам необходимо объявить пространство имен 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"/>
Хотя @ Mads-Hansen дал хороший ответ , полезно знать, что существует альтернативный способ ссылки на имена, которые находятся в пространстве имен :
В этом случае вы также можете получить доступ к атрибуту с помощью следующего выражения XPath:
DCPType/HTTP/Get/OnlineResource/@*
[namespace-uri() = 'http://www.w3.org/1999/xlink']