XSLT: Как получить список всех используемых пространств имен

Я пишу таблицу стилей XSLT 1.0 для преобразования XML-документов с несколькими пространствами имен в HTML. В каком-то месте полученного HTML-кода я хочу перечислить все пространства имен, которые встречаются в документе.

Возможно ли это?

Я думал о чем-то вроде

<xsl:for-each select="//*|//@*">
  <xsl:value-of select="namespace-uri(.)" />
</xsl:for-each>

, но, конечно, я получил бы миллионы дубликатов. Так что мне пришлось бы как-то фильтровать то, что я уже напечатал.

Рекурсивный вызов шаблонов будет работать, но я не могу понять, как достичь всех элементов.

Доступ к // @ xmlns: * напрямую не работает, потому что нельзя получить к нему доступ через XPath (нельзя привязывать какой-либо префикс к пространству имен xmlns: ).

10
задан skaffman 27 October 2010 в 07:47
поделиться