заменить пространство имен URI, используя XSLT в сообщении SOAP

у меня есть входящее мыльное сообщение, пытающееся заменить часть пространства имен URI другой строкой. Я могу заменить весь URI другим URI, но не могу изменить существующий URI. Мне нужно искать «OLDSTRING» и заменить на «NEWSTRING». Строка VARIABLESTRING варьируется в каждом входном xml, поэтому я должен сохранить ее в выходном xml

Входной XML:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:schemas-OLDSTRING-com:VARIABLESTRING">
       <soapenv:Header/>
       <soapenv:Body>
          <requestMessage xmlns="urn:schemas-OLDSTRING-com:VARIABLESTRING">
            <merchantID>TESTID</merchantID>   
          </requestMessage>
       </soapenv:Body>
    </soapenv:Envelope>

ВЫХОДНОЙ XML:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:schemas-NEWSTRING-com:transaction-data-1.69">
   <soapenv:Header/>
   <soapenv:Body>
      <requestMessage xmlns="urn:schemas-NEWSTRING-com:VARIABLESTRING">
        <merchantID>TESTID</merchantID>   
      </requestMessage>
   </soapenv:Body>
</soapenv:Envelope>

Я попробовал следующий XSL и смог изменить URI пространства имен, но я хочу заменить только «OLDSTRING» на «NEWSTRING» и оставить оставшуюся строку такой, какая она есть.

XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="@*|*|text()" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="//*[namespace-uri()='urn:schemas-OLDSTRING-com:VARIABLESTRING']">
        <xsl:element name="{local-name()}" namespace="urn:schemas-NEWSTRING-com:VARIABLESTRING" >
            <xsl:apply-templates select="@*|*|text()" />
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

Ответы на вопрос(2)

Ваш ответ на вопрос