Это, главным образом, проблема с пространством имен. Пространства имен являются фундаментальной концепцией в XML. Если вы не знакомы с пространствами имен, пожалуйста, найдите время, чтобы узнать и понять их.
Ваш вход XML имеет пространство имен по умолчанию <products xmlns="http://www.dcs.bbk.ac.uk/~rpedro02/ns/products">
, что означает, что все элементы принадлежат этому пространству имен, хотя они не имеют префикса пространства имен. Запросы XPath всегда должны быть префиксными, если вы нацеливаете элементы в определенном пространстве имен - запросы не наследуют пространство имен по умолчанию.
В вашем случае это означает, что вам нужно объявить пространство имен по умолчанию вашего входного XML с префиксом, а затем использовать этот префикс при обращении к любым элементам вашего входного документа XML. В основном это означает изменение запросов в шаблоне <xsl:template match="/products/product">
.
Некоторые примеры кода: декларирует пространство имен, как этот
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:prod="http://www.dcs.bbk.ac.uk/~rpedro02/ns/products" >
, а затем использовать префикс prod
в запросах как этот
<xsl:template match="/prod:products/prod:product">
<div class="product">
<img>
<xsl:attribute name="alt">
<xsl:value-of select="prod:name"/>
</xsl:attribute>
<xsl:attribute name="src">
<xsl:value-of select="prod:picture"/>
</xsl:attribute>
</img>
...
Может быть, вы какой-то код? – Azat
Проверьте ссылки на вопрос. Слишком долго вставлять сюда. – rjpedrosa
Пример ввода XML –