我需要這個XML轉換:變換XML到另一種XSL
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://85.152.52.210/moodle/webservice/soap/simpleserver.php//"
xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:moodle_course_update_plansResponse>
<return SOAP-ENC:arrayType="ns2:Map[1]" xsi:type="SOAP-ENC:Array">
<item xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">PlanId</key>
<value xsi:type="xsd:string" />
</item>
<item>
<key xsi:type="xsd:string">Operacion</key>
<value xsi:type="xsd:string">D</value>
</item>
<item>
<key xsi:type="xsd:string">OpDesc</key>
<value xsi:type="xsd:string">Desconocida</value>
</item>
<item>
<key xsi:type="xsd:string">ErrorId</key>
<value xsi:type="xsd:string">01</value>
</item>
<item>
<key xsi:type="xsd:string">ErrorDesc</key>
<value xsi:type="xsd:string">Faltas datos de entrada. Es necesario
especificar el identificador del plan en GesforIaap</value>
</item>
</item>
</return>
</ns1:moodle_course_update_plansResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
到這一個:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ActualizaPlanesResponse xmlns="http://www.princast.es/iaap/teleformacion/1.0/kedrosWS/kedrosWS.wsdl">
<ns1:ActualizaPlanesRespuesta xmlns:ns1="http://princast.es/teleformacion/1.0/kedrosWS/kedrosWS.xsd">
<ns1:listaErroresPlanes>
<ns1:Error>
<ns1:PlanId>Identificador de plan desconocido</ns1:PlanId>
<ns1:Operacion>
<ns1:Codigo>D</ns1:Codigo>
<ns1:Descripcion>Desconocida</ns1:Descripcion>
</ns1:Operacion>
<ns1:Error>
<ns1:Codigo>01</ns1:Codigo>
<ns1:Descripcion>Faltan datos de entrada. Es necesario especificar el identificador del plan en GesforIaap.</ns1:Descripcion>
</ns1:Error>
</ns1:Error>
</ns1:listaErroresPlanes>
</ns1:ActualizaPlanesRespuesta>
</ActualizaPlanesResponse>
</soapenv:Body>
</soapenv:Envelope>
我嘗試這樣做,這片的xsl:
<xsl:template match="ns1:moodle_course_update_plansResponse">
<ActualizaPlanesResponse xmlns="http://www.princast.es/iaap/teleformacion/1.0/kedrosWS/kedrosWS.wsdl">
<ns1:ActualizaPlanesRespuesta xmlns:ns1="http://princast.es/teleformacion/1.0/kedrosWS/kedrosWS.xsd">
<xsl:choose>
<xsl:when test="SOAP-ENC:arrayType=xsd:ur-type[0]">
<ns1:listaErroresPlanes/>
</xsl:when>
<xsl:otherwise>
<xsl:for-each match="item/item">
<xsl:variable name="etiqueta">
<xsl:value-of select="key" />
</xsl:variable>
<xsl:param name="{$etiqueta}">
<xsl:value-of select="value" />
</xsl:param>
</xsl:for-each>
<ns1:Error>
<ns1:PlanId> <xsl:with-param name="PlanId" /></ns1:PlanId>
<ns1:Operacion>
<ns1:Codigo><xsl:with-param name="OperacionId" /></ns1:Codigo>
<ns1:Descripcion><xsl:with-param name="OperacionDesc" /></ns1:Descripcion>
</ns1:Operacion>
<ns1:Error>
<ns1:Codigo><xsl:with-param name="ErrorId" /></ns1:Codigo>
<ns1:Descripcion><xsl:with-param name="ErrorDesc" /></ns1:Descripcion>
</ns1:Error>
</ns1:Error>
</xsl:otherwise>
</xsl:choose>
</ns1:ActualizaPlanesRespuesta>
</ActualizaPlanesResponse>
</xsl:template>
但我沒有得到任何答案:
<ActualizaPlanesResponse
xmlns="http://www.princast.es/iaap/teleformacion/1.0/kedrosWS/kedrosWS.wsdl"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://xml.apache.org/xml-soap"
xmlns:ns1="http://85.152.52.210/moodle/webservice/soap/simpleserver.php//"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns1:ActualizaPlanesRespuesta
xmlns:ns1="http://princast.es/teleformacion/1.0/kedrosWS/kedrosWS.xsd">
<ns1:Error>
<ns1:PlanId />
<ns1:Operacion>
<ns1:Codigo />
<ns1:Descripcion />
</ns1:Operacion>
<ns1:Error>
<ns1:Codigo />
<ns1:Descripcion />
</ns1:Error>
</ns1:Error>
</ns1:ActualizaPlanesRespuesta>
</ActualizaPlanesResponse>
任何人都可以幫助我嗎?
請注意,你有'ActualizaPlanesResponse'和'ActualizaPlanesRespuesta'在同一個命名空間,但我認爲他們不應該。 – 2011-03-24 15:54:33
@lwburk:謝謝。現在它已經修復了。 – 2011-03-25 21:28:18