Как имитировать copy-namespaces = "no" в XSLT 1.0? - PullRequest
9 голосов
/ 27 января 2012

Я хочу переписать этот кусок xslt в XSLT 1.0, который не поддерживает "пространства имен копирования".

<xsl:copy-of copy-namespaces="no" select="maml:alertSet/maml:alert" />

Как?

1 Ответ

13 голосов
/ 27 января 2012

Следующая имитация конструкции XSLT 2.0:

Создайте шаблоны в режиме, который восстановит ваши узлы без пространств имен:

<!-- generate a new element in the same namespace as the matched element,
     copying its attributes, but without copying its unused namespace nodes,
     then continue processing content in the "copy-no-namepaces" mode -->

<xsl:template match="*" mode="copy-no-namespaces">
    <xsl:element name="{local-name()}" namespace="{namespace-uri()}">
        <xsl:copy-of select="@*"/>
        <xsl:apply-templates select="node()" mode="copy-no-namespaces"/>
    </xsl:element>
</xsl:template>

<xsl:template match="comment()| processing-instruction()" mode="copy-no-namespaces">
    <xsl:copy/>
</xsl:template>

Применить шаблоны для нужного элемента (ов) в этом режиме:

<xsl:apply-templates  select="maml:alertSet/maml:alert" mode="copy-no-namespaces"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...