Валиков Алексей Н.
Шрифт:
Листинг 8.15. Преобразование, использующее псевдонимы пространств имен
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:axsl="http://www.w3.org/1999/XSL/Transform/Alias">
<xsl:namespace-alias
stylesheet-prefix="axsl"
result-prefix="xsl"/>
<xsl:template match="replace">
<axsl:template match="{@select}">
<axsl:element name="{@with}">
<axsl:apply-templates/>
</axsl:element>
</axsl:template>
</xsl:template>
<xsl:template match="remove">
<axsl:template match="{@select}"/>
</xsl:template>
<xsl:template match="transform">
<axsl:stylesheet version="1.0">
<xsl:apply-templates/>
<axsl:template match="@*|node">
<axsl:copy>
<axsl:apply-templates select="@*|node"/>
</axsl:copy>
</axsl:template>
</axsl:stylesheet>
</xsl:template>
</xsl:stylesheet>
В этом преобразовании элемент
xsl:namespace-alias
указывает на то, что все элементы, принадлежащие в преобразовании пространству имен с URI http://www.w3.org/1999/XSL/Transform/Alias
в выходящем документе должны принадлежать пространству имен с URI
http://www.w3.org/1999/XSL/Transform
то есть пространству имен XSLT.
Результатом применения этого преобразования к документу из листинга 8.13 будет следующий документ.
Листинг 8.16. Выходящее преобразование
<axsl:stylesheet
version="1.0"
xmlns:axsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<axsl:template match="a"/>
<axsl:template match="b">
<axsl:element name="B">
<axsl:apply-templates/>
</axsl:element>
</axsl:template>
<axsl:template match="c">
<axsl:element name="C">
<axsl:apply-templates/>
</axsl:element>
</axsl:template>
<axsl:template match="@*|node">
<axsl:copy>
<axsl:apply-templates select="@*|node"/>
</axsl:copy>
</axsl:template>
</axsl:stylesheet>
В этом сгенерированном преобразовании элементы имеют префикс
axsl
, но при этом принадлежат пространству имен XSLT. Атрибуты
stylesheet-prefix
и result-prefix
элемента xsl:namespace-alias
могут иметь значения "#default"
. Определение вида <xsl:namespace-alias
stylesheet-prefix="a"
result-prefix="#default"/>
означает, что элементы, принадлежащие в преобразовании пространству имен
а
, в выходящем документе должны принадлежать пространству имен по умолчанию. Определение вида <xsl:namespace-alias
stylesheet-prefix="#default"
result-prefix="a"/>
означает, что элементы, принадлежащие в преобразовании пространству имен по умолчанию, в выходящем документе должны принадлежать пространству имен
а
.