Я совсем новичок в XSLT/Xpath....
У меня есть следующее XML-сообщение...
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<request xmlns="http://ws.apache.org/ns/synapse">
<gam:process xmlns:gam="http://gamopera.ifpl.csi.it">
<!--Zero or more repetitions:-->
<gam:id>1</gam:id>
<gam:id>3</gam:id>
<gam:id>5</gam:id>
<gam:id>7</gam:id>
<gam:id>438</gam:id>
<gam:id>2</gam:id>
<gam:id>4</gam:id>
<gam:id>6</gam:id>
<gam:id>8</gam:id>
</gam:process>
<ax2586:good xmlns:ax2586="http://gamopera.ifpl.csi.it">
<ax2586:id>1</ax2586:id>
<ax2586:id>3</ax2586:id>
<ax2586:id>5</ax2586:id>
<ax2586:id>7</ax2586:id>
</ax2586:good>
</request>
</soapenv:Body>
</soapenv:Envelope>
и я хотел бы получить что-то вроде этого
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<ns:processResponse xmlns:ns="http://gamopera.ifpl.csi.it">
<ns:return xsi:type="ax2586:Result" xmlns:ax2586="http://dto.gamopera.ifpl.csi.it/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ax2586:good xsi:type="ax2586:ElencoId" xmlns:ax2586="http://gamopera.ifpl.csi.it">
<ax2586:good>
<ax2586:id>1</ax2586:id>
<ax2586:id>3</ax2586:id>
<ax2586:id>5</ax2586:id>
<ax2586:id>7</ax2586:id>
</ax2586:good>
</ax2586:good>
<ax2586:message>Message Store does not exist.</ax2586:message>
<ax2586:statusCode>0</ax2586:statusCode>
<ax2586:wrong xsi:type="ax2586:ElencoId">
<ax2586:wrong xmlns:ax2586="http://gamopera.ifpl.csi.it">
<gam:id xmlns:gam="http://gamopera.ifpl.csi.it" xmlns="http://ws.apache.org/ns/synapse">438</gam:id>
<gam:id xmlns:gam="http://gamopera.ifpl.csi.it" xmlns="http://ws.apache.org/ns/synapse">2</gam:id>
<gam:id xmlns:gam="http://gamopera.ifpl.csi.it" xmlns="http://ws.apache.org/ns/synapse">4</gam:id>
<gam:id xmlns:gam="http://gamopera.ifpl.csi.it" xmlns="http://ws.apache.org/ns/synapse">6</gam:id>
<gam:id xmlns:gam="http://gamopera.ifpl.csi.it" xmlns="http://ws.apache.org/ns/synapse">8</gam:id>
</ax2586:wrong>
</ax2586:wrong>
</ns:return>
</ns:processResponse>
Ища в Интернете сейчас, я построил это XSLT-преобразование
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="2.0">
<xsl:template match="/">
<xsl:variable name="ns1" select="//*[local-name()='process']/*"/>
<xsl:variable name="ns2" select="//*[local-name()='good']/*"/>
<xsl:variable name="difference" select="$ns1[not(.=$ns2)],$ns2[not(.=$ns1)]"/>
<ax2586:wrong xmlns:ax2586="http://gamopera.ifpl.csi.it">
<ax2586:wrong><xsl:copy-of select="$difference"/></ax2586:wrong>
</ax2586:wrong>
</xsl:template>
</xsl:stylesheet>
кажется, что он работает нормально, но, пытаясь использовать его в разных XSLT-тестерах в Интернете, я обнаружил, что где-то он работает, а где-то нет, поэтому я не уверен, что это может быть правильным и переносимым решением.
ПРИМЕЧАНИЕ. Я должен использовать его в прокси-сервере WSO2.
Любое предложение или альтернативный способ получить тот же результат?
заранее большое спасибо
Чезаре