xsl:copy
копирует узлы с их пространствами имен.
Вам необходимо переименовать все узлы и пространства имен в их локальные имена без пространства имен. Это будет выглядеть так (замена всех ваших узлов и атрибутов соответствия)
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
Кроме того, ваш сопоставитель для item
никогда не вызывается, потому что ваш XML имеет пространство имен по умолчанию xmlns="http://purl.org/rss/1.0/"
. Это означает, что каждый элемент в XML, который не имеет префикса пространства имен, является частью этого пространства имен.
Так что вам нужно объявить это пространство имен в вашем XSL тоже
xmlns:rss="http://purl.org/rss/1.0/"
А затем измените свой сопоставитель на
<xsl:template match="rss:item">
Кстати: если вы хотите избавиться от объявлений пространства имен, которые больше не используются, вы должны объявить пространства имен в вашем XSL, а затем добавить их к исключениям результата
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:hr="http://www.w3.org/2000/08/w3c-synd/#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cb="http://www.centralbanks.org/rss/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rss="http://purl.org/rss/1.0/"
exclude-result-prefixes="rdf rdfs hr dc cb rss">