Использование XSLT, мне интересно, как получить вывод, чтобы использовать префиксы пространства имен стилей, а не префиксы входного документа. В качестве примера, учитывая это очень упрощенный документ:Карта XSLT входных префиксов документов к предпочтительным значениям
<?xml version="1.0"?>
<a:node xmlns:a="urn:schemas:blah:"/>
И следующий XSL преобразование:
<?xml version="1.0"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:blah="urn:schemas:blah:" version="2.0">
<xsl:output indent="yes">
<xsl:template match="/blah:node">
<xsl:copy/><!-- marked -->
</xsl:template>
</xsl:transform>
я могу сказать, что процессор (Saxon8, если это имеет значение) признает эквивалентность префиксов " blah: 'и' a: ', но fn:in-scope-prefixes(), например, не показывает' blah ', только' a '. Изменение <!-- marked -->
строки выше:
<node><xsl:value-of select="in-scope-prefixes(.)"/></node>
Выходов:
<?xml version="1.0" encoding="UTF-8"?>
<node xmlns:blah="urn:schemas:blah:">xml a</node>
Как я могу сопоставить входной префикс «а» до «л», не зная заранее, что входной файл вызывает, что префикс «а «? (So <xsl:namespace-alias/>
не будет работать для меня.)
В качестве дополнительного контекста, если он указывает на лучшее решение, это для просмотра XML-документов, которые генерируются извне. Внешний процесс создает входной документ с использованием автоматически генерируемых префиксов «a:», «b:», «c:» и т. Д. Я хочу иметь возможность отображать эти префиксы с использованием «более дружественных» префиксов пространства имен.
Обновление: Поведение в области видимости-префиксов() объясняется the definition of Statically known namespaces
Хороший вопрос (+1). См. Мой ответ для полного решения XSLT 1.0 и XSLT 2.0. –