Этот код должен печатать полный путь ко всем элементам и атрибутам в данных.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0" expand-text="yes">
<xsl:output method="text"/>
<xsl:template match="text()"/>
<xsl:template match="*">
{ancestor-or-self::*/concat(node-name(),'/')}<xsl:apply-templates select="@*|*"/>
</xsl:template>
<xsl:template match="@*">{'@' || node-name() || ','}</xsl:template>
</xsl:stylesheet>
Итак, с этим вводом
<a:b xmlns:a="ans" xmlns:c="cns">
<c:x/>
</a:b>
Я ожидаю
{ans}b
{ans}b/ {cns}x
точный интервал не имеет значения.
Я получаю вывод, как если бы я использовал функцию name () вместо имени узла, т.е.
a:b
a:b / c:x
Вероятно, есть работа- объединив local-name и namespace-uri, но я хотел бы знать, почему то, что опубликовано, не делает того, на что я надеялся.