Преобразование новичка в XSL, для получения справки по преобразованию данных с использованием xsl.
Входные данные указаны ниже:
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Body> <abcRequest xmlns="http://google.com/2018/abcService"> <messageHeader> <Id>000000</Id> <aId>572b0285-7e06-4834-90c0-dc45eeeafe70</aId> <version>1.0</version> </messageHeader> </abcRequest> </soap:Body> </soap:Envelope>
Ожидаемые выходные данные приведены ниже:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:p="http://www.bnppf.com/20190101/TA/TA99eWLNotificationDataSrv"> <soap:Header> <wsa:Action xmlns:wsa="http://www.w3.org/2005/08/addressing">http://www.gmail.com/20190101/newService</wsa:Action> </soap:Header> <soap:Body> <p:abcRequest xmlns="http://google.com/2018/abcService"> <p:messageHeader> <p:Id>000000</p:Id> <p:aId>572b0285-7e06-4834-90c0-dc45eeeafe70</p:aId> <p:version>1.0</p:version> </p:messageHeader> </p:abcRequest> </soap:Body> </soap:Envelope>
Преобразование можно выполнить с помощью следующей таблицы стилей:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:abc="http://google.com/2018/abcService" xmlns:p="http://www.bnppf.com/20190101/TA/TA99eWLNotificationDataSrv"> <xsl:output method="xml"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*" /> </xsl:copy> </xsl:template> <xsl:template match="soap:Envelope"> <soap:Envelope> <soap:Header> <wsa:Action xmlns:wsa="http://www.w3.org/2005/08/addressing">http://www.gmail.com/20190101/newService</wsa:Action> </soap:Header> <xsl:apply-templates select="soap:Body" /> </soap:Envelope> </xsl:template> <xsl:template match="abc:*"> <xsl:element name="p:{local-name()}"> <xsl:apply-templates select="node()|@*" /> </xsl:element> </xsl:template> </xsl:stylesheet>
Но следующее пространство имен по умолчанию xmlns для вашего элемента p:abcRequest не будет создано, поскольку оно излишне.
xmlns
p:abcRequest
<p:abcRequest xmlns="http://google.com/2018/abcService">
Вместо этого для этого элемента и его дочерних элементов будет установлено пространство имен xmlns:p. Выход:
xmlns:p
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:abc="http://google.com/2018/abcService" xmlns:p="http://www.bnppf.com/20190101/TA/TA99eWLNotificationDataSrv"> <soap:Header> <wsa:Action xmlns:wsa="http://www.w3.org/2005/08/addressing">http://www.gmail.com/20190101/newService</wsa:Action> </soap:Header> <soap:Body> <p:abcRequest> <p:messageHeader> <p:Id>000000</p:Id> <p:aId>572b0285-7e06-4834-90c0-dc45eeeafe70</p:aId> <p:version>1.0</p:version> </p:messageHeader> </p:abcRequest> </soap:Body> </soap:Envelope>