У меня есть следующий XML. Я должен включить тело мыла под мыльным конвертом.
<headers>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:def="http://lmn" xmlns:abc="http://xyz"><soapenv:Header><abc:Security> <abc:UsernameToken>
<abc:Username>abc</abc:Username>
<abc:Password>pwd</abc:Password>
</abc:UsernameToken>
</abc:Security>
</soapenv:Header>
</soapenv:Envelope>
</headers>
Мой вывод должен быть как
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:def="http://lmn" xmlns:abc="http://xyz">
<soapenv:Header>
<abc:Security>
<abc:UsernameToken>
<abc:Username>abc</abc:Username>
<abc:Password>pwd</abc:Password>
</abc:UsernameToken>
</abc:Security>
</soapenv:Header>
<soapenv:Body><a><b></b><c></c></a></soapenv:Body>
</soapenv:Envelope>
Ниже мой XSL.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:soap="http://www.w3.org/2003/05/soap-envelope" exclude-result-prefixes="xd soap soapenv">
<xsl:template match="/">
<xsl:variable name="envNode"><xsl:copy-of select="name(headers/*)"/></xsl:variable>
<xsl:choose>
<xsl:when test="contains($envNode,'soapenv')">
<xsl:element name="{name(headers/*)}">
<xsl:copy-of select="headers/soapenv:Envelope/*"/>
<xsl:element name="soapenv:Body">
<a><b></b><c></c></a>
</xsl:element>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{name(soapOptions/headers/*)}">
<xsl:copy-of select="soapOptions/headers/soap:Envelope/*"/>
<xsl:element name="soap:Body">
<a><b></b><c></c></a>
</xsl:element>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Я получаю следующий вывод.
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Header xmlns:def="http://lmn" xmlns:abc="http://xyz"">
<abc:Security>
<abc:UsernameToken>
<abc:Username>abc</abc:Username>
<abc:Password>pwd</abc:Password>
</abc:UsernameToken>
</abc:Security>
</soapenv:Header>
<soapenv:Body><a><b/><c/></a></soapenv:Body>
</soapenv:Envelope>
Я хочу скопировать все пространства имен, которые есть в узле soapenv: Envelope, в один и тот же узел. Но это копируется в soapenv: Header.
Я пробовал много опций namespace вместе с namespace в name элемента в XSL.
Может ли кто-нибудь помочь мне в этом.
Заранее спасибо,
Najma