xslt переименовать тег с пространством имен - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь переименовать родительский тег XML.я посмотрел его в stackoverflow и увидел следующий код:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()">
<xsl:copy>
  <xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Response_123">
<Response>
  <xsl:apply-templates select="@*|node()"/>
</Response>
</xsl:template>
</xsl:stylesheet>

к сожалению, код не работает для моего требования.в приведенном ниже примере тег связан с пространством имен.

<ns1:Response_123 xmlns:ns1="AAA">
<System>Alpha</System>
</ns1:Response_123>

Когда я использую код выше, я все равно получаю то же сообщение (без разницы в любом случае).Как я могу изменить вывод на:

<ns1:Response xmlns:ns1="AAA">
<System>Alpha</System>
</ns1:Response>

Я также попытался добавить пространство имен в коде, это не сработало.

<xsl:template match="Response_123" namespace="AAA">
<Response namespace="AAA">
  <xsl:apply-templates select="@*|node()"/>
</Response>
</xsl:template>

Спасибо всем!

1 Ответ

0 голосов
/ 17 сентября 2018

Добавьте пространство имен в свой XSLT, а также вызовите шаблон с пространством имен

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ns1="AAA"
    version="1.0">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="ns1:Response_123">
        <Response>
            <xsl:apply-templates select="@*|node()"/>
        </Response>
    </xsl:template>
</xsl:stylesheet>
...