Ich habe eine XSLT, die von einem SOAP-Antwort-XML in ein Java-Objekt umgewandelt wird.Teilen, ersetzen und verketten eine Zeichenfolge in XSLT 2.0
In der Soap-Antwort gibt es Knoten urn:Statues
, die Komma (,) getrennte Zeichenfolge hat.
Ich möchte den Wert von urn:Statues
Knoten teilen und einen Teil des Wertes ersetzen und diese wieder in eine Zeichenfolge mit Komma (,) getrennt verketten.
Soap Antwort:
Mein XSLT:
<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn="urn:HPD_Incident_Query_WS">
<xsl:output method='xml' indent='yes' />
<xsl:template match="urn:Incident_Query_ServiceResponse" name="split">
<xsl:for-each select="tokenize(./urn:Statuses,',')">
<xsl:if test="(normalize-space(.) eq 'Cerrado')">
<xsl:value-of select="replace(normalize-space(.), 'Cerrado', 'CLOSED')"/>
</xsl:if>
<xsl:if test="(normalize-space(.) eq 'CANCELLED')">
<xsl:value-of select="replace(normalize-space(.), 'CANCELLED', 'CLOSED')"/>
</xsl:if>
<xsl:if test="(normalize-space(.) eq 'En Curso')">
<xsl:value-of select="replace(normalize-space(.), 'En Curso', 'OPENACTIVE')"/>
</xsl:if>
<xsl:if test="(normalize-space(.) eq 'Pendiente')">
<xsl:value-of select="replace(normalize-space(.), 'Pendiente', 'CLOSED.PENDING')"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template match='/'>
<getTicketInfoResponse>
<responseCode>
<xsl:value-of select='/soapenv:Envelope/soapenv:Body/urn:Incident_Query_ServiceResponse/urn:ResponseCode' />
</responseCode>
<responseMessage>
<xsl:value-of select='/soapenv:Envelope/soapenv:Body/urn:Incident_Query_ServiceResponse/urn:ResponseMsg' />
</responseMessage>
<errorCode>
<xsl:value-of select='/soapenv:Envelope/soapenv:Body/urn:Incident_Query_ServiceResponse/urn:ErrorCode' />
</errorCode>
<errorMsg>
<xsl:value-of select='/soapenv:Envelope/soapenv:Body/urn:Incident_Query_ServiceResponse/urn:ErrorMsg' />
</errorMsg>
<ticketDetails>
<troubleTicketState>
<xsl:apply-templates select="/soapenv:Envelope/soapenv:Body"/>
</troubleTicketState>
<troubleTicketId>
<xsl:value-of select='/soapenv:Envelope/soapenv:Body/urn:Incident_Query_ServiceResponse/urn:Incidents_Number' />
</troubleTicketId>
</ticketDetails>
</getTicketInfoResponse>
</xsl:template>
</xsl:stylesheet>
Das Problem hier ist, wenn der Wert auf urn:Statuses
gesetzt werden die Werte nicht durch Komma (,) getrennt .
Aktuell Ergebnis nach der Transformation:
<?xml version="1.0" encoding="UTF-8"?>
<getTicketInfoResponse xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn="urn:HPD_Incident_Query_WS">
<responseCode/>
<responseMessage/>
<errorCode>0</errorCode>
<errorMsg/>
<ticketDetails>
<troubleTicketState> CLOSEDCLOSEDOPENACTIVECLOSED</troubleTicketState>
<troubleTicketId>INC80167842,INC77752907,INC20954581,INC20954533</troubleTicketId>
</ticketDetails>
</getTicketInfoResponse>
Erwartetes Ergebnis:
<?xml version="1.0" encoding="UTF-8"?>
<getTicketInfoResponse xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn="urn:HPD_Incident_Query_WS">
<responseCode/>
<responseMessage/>
<errorCode>0</errorCode>
<errorMsg/>
<ticketDetails>
<troubleTicketState>CLOSED,CLOSED,OPENACTIVE,CLOSED</troubleTicketState>
<troubleTicketId>INC80167842,INC77752907,INC20954581,INC20954533</troubleTicketId>
</ticketDetails>
</getTicketInfoResponse>
Kann jemand sagen, wie die Zeichenfolge durch Komma trennen (,) in dem resultierenden Tag <troubleTicketState>
.
Gibt es einen besseren Weg, dies zu tun?
Vielen Dank im Voraus.
Thank you !!! Ich habe nicht so gedacht. Es funktioniert perfekt. – dev
@ amit4497 Beachten Sie, dass davon ausgegangen wird, dass die ersetzten Werte nicht als Teilzeichenfolgen in anderen Werten angezeigt werden. –
Sorry, habe den letzten Teil nicht bekommen. – dev