Мне нужно прочитать CDATA и преобразовать в массив.
У меня есть XML и XSLT, и я должен проверить содержимое тега «name», показывающего сообщение «Minutos ILIMITADOS». когда сообщение содержит «5claro», в противном случае «otro mensaje».
Мне нужно запрограммировать XSLT версии 1.0.
В конце я отбрасываю ожидаемый результат
Я надеюсь, что вы можете мне помочь.
Заранее спасибо
XML
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header xmlns:v1="http://claro.com.ec/osb/message/Ussd/UssdMessage/v1"/>
<soap:Body xmlns:v1="http://claro.com.ec/osb/message/Ussd/UssdMessage/v1">
<ns2:QueryResponseMessage xmlns:ns2="http://claro.com.ec/osb/message/Ussd/UssdMessage/v1">
<additionalFields>
<additionalField>
<byteValue>
<![CDATA[<offerList>
<offer>
<balanceType>Adicional</balanceType>
<balance>
<offerId/>
<typeCode>C_Paquete_Voz_Onnet</typeCode>
<total/>
<endDateTime>2020-02-21T11:55:05</endDateTime>
<name>FACEBOOK POR 1 DIA incluye Whatsapp GRATIS</name>
<shortName/>
<useType>ilimitado</useType>
</balance>
<balance>
<offerId/>
<typeCode>C_Paquete_Voz_Onnet</typeCode>
<total/>
<endDateTime>2020-03-02T11:55:05</endDateTime>
<name>FACEBOOK POR 1 DIA incluye Whatsapp GRATIS + llamadas ilimitadas a 5claro movil</name>
<shortName/>
<useType>ilimitado</useType>
</balance>
<balance>
<offerId/>
<typeCode>FBMSN</typeCode>
<total/>
<endDateTime>2020-02-22T11:55:05</endDateTime>
<name>FACEBOOK POR 1 DIA incluye Whatsapp GRATIS</name>
<shortName/>
<useType>ilimitado</useType>
</balance>
<balance>
<offerId/>
<typeCode>C_GPRS_SOCIAL_TWITTER</typeCode>
<total/>
<endDateTime>2020-02-23T11:55:05</endDateTime>
<name>FACEBOOK POR 1 DIA incluye Whatsapp GRATIS</name>
<shortName/>
<useType>ilimitado</useType>
</balance>
<balance>
<offerId/>
<typeCode>C_GPRS_SOCIAL_FACEBOOK</typeCode>
<total/>
<endDateTime>2020-02-23T11:55:05</endDateTime>
<name>FACEBOOK POR 1 DIA incluye Whatsapp GRATIS</name>
<shortName/>
<useType>ilimitado</useType>
</balance>
<balance>
<offerId/>
<typeCode>MCV</typeCode>
<total/>
<endDateTime>2020-02-24T11:55:05</endDateTime>
<name>FACEBOOK POR 1 DIA incluye Whatsapp GRATIS</name>
<shortName/>
<useType>ilimitado</useType>
</balance>
<balance>
<offerId/>
<typeCode>MINST</typeCode>
<total/>
<endDateTime>2020-02-25T11:55:05</endDateTime>
<name>FACEBOOK POR 1 DIA incluye Whatsapp GRATIS</name>
<shortName/>
<useType>ilimitado</useType>
</balance>
<balance>
<offerId/>
<typeCode>MYT</typeCode>
<total/>
<endDateTime>2020-03-01T11:55:05</endDateTime>
<name>FACEBOOK POR 1 DIA incluye Whatsapp GRATIS</name>
<shortName/>
<useType>ilimitado</useType>
</balance>
</offer>
<offer>
<balanceType>Promocional</balanceType>
</offer>
<offer>
<balanceType>Incluido</balanceType>
</offer>
<offer>
<balanceType>Flex</balanceType>
</offer>
</offerList>]]>
</byteValue>
</additionalField>
</additionalFields>
<header>
<externalTransactionDate>2020-01-30T19:52:42</externalTransactionDate>
<externalTransactionId>121323</externalTransactionId>
<internalTransactionId>b2b5a8cb-6a2d-4a11-b75a-395036e5b2aa</internalTransactionId>
<responseTime/>
<token>0097f464-acb5-43ec-008b-14aebeae2296</token>
</header>
<stackMessages>
<stackMessage>
<id>0</id>
<systemMessage>Operation Executed Successfully</systemMessage>
<type/>
<userMessage/>
</stackMessage>
</stackMessages>
</ns2:QueryResponseMessage>
</soap:Body>
</soap:Envelope>
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet exclude-result-prefixes="exsl" version="1.0" xmlns:exsl="http://exslt.org/common" xmlns:ns0="http://axis/EISApiOnlineWS.wsdl/types/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="UTF-8" method="xml" version="1.0">
</xsl:output>
<xsl:template match="/">
<xsl:variable name="hala" select="//byteValue/text()"></xsl:variable>
<xsl:variable name="balance" select="substring-before(substring-after($hala,'<balance>'),'</balance>')"/>
<xsl:variable name="typeCode" select="substring-before(substring-after($balance,'<typeCode>'),'</typeCode>')"/>
<xsl:variable name="name" select="substring-before(substring-after($balance,'<name>'),'</name>')"/>
<umsprot version="1">
<exec_rsp diagnostic="Successful consultaBalanceSVA request" result="OK">
<data name="id">
<xsl:value-of select="//id">
</xsl:value-of>
</data>
<xsl:choose>
<xsl:when test="//id = 0">
<xsl:text>Tu paquete incluye: </xsl:text>
<xsl:if test="$typeCode = 'C_Paquete_Voz_Onnet'">
<xsl:choose>
<xsl:when test="contains($name,'5claro')">
<xsl:text>Minutos ILIMITADOS.</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>otro mensaje</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:when>
</xsl:choose>
</exec_rsp>
</umsprot>
</xsl:template>
</xsl:stylesheet>
Результат
<umsprot xmlns:ns0="http://axis/EISApiOnlineWS.wsdl/types/" version="1">
<exec_rsp diagnostic="Successful consultaBalanceSVA request" result="OK">
<data name="id">0</data>Tu paquete incluye:
otro mensaje</exec_rsp>
</umsprot>
Результат, который я хочу получить
<umsprot xmlns:ns0="http://axis/EISApiOnlineWS.wsdl/types/" version="1">
<exec_rsp diagnostic="Successful consultaBalanceSVA request" result="OK">
<data name="id">0</data>
<data name="message">
Tu paquete incluye:
otro mensaje. FACEBOOK POR 1 DIA incluye Whatsapp GRATIS. Expira el 2020/02/21
minutos ilimitados. FACEBOOK POR 1 DIA incluye Whatsapp GRATIS + llamadas ilimitadas a 5claro movil. Expira el 2020/03/02
FACEBOOK POR 1 DIA incluye Whatsapp GRATIS. Expira el 2020/02/22
FACEBOOK POR 1 DIA incluye Whatsapp GRATIS. Expira el 2020/02/23
FACEBOOK POR 1 DIA incluye Whatsapp GRATIS. Expira el 2020/02/23
FACEBOOK POR 1 DIA incluye Whatsapp GRATIS. Expira el 2020/02/24
FACEBOOK POR 1 DIA incluye Whatsapp GRATIS. Expira el 2020/02/25
FACEBOOK POR 1 DIA incluye Whatsapp GRATIS. Expira el 2020/03/01
</data>
</exec_rsp>
</umsprot>