[Dev] [ESB][XSLT] Capturing #xA; (new line) and Replace it with in \n using XSLT.
Hi team, I have requirement to replace #xA; character and replace it with \n using XSLT. So I came up with following XSLT and Proxy service. ( Capp is attached ) ?xml version=1.0 encoding=UTF-8? xsl:stylesheet version=1.0 xmlns:xsl= http://www.w3.org/1999/XSL/Transform; xmlns:tns= http://www.example.org/Echo/; xsl:output method=text encoding=UTF-8 indent=yes/ xsl:template name=escapeNewLine xsl:param name=text select=string(.)/ xsl:choose xsl:when test=contains($text, '#xA;') xsl:value-of select=substring-before($text, '#xA;')/\nxsl:call-template name=escapeNewLine xsl:with-param name=text select=substring-after($text, '#xA;')/ /xsl:call-template /xsl:when xsl:otherwise xsl:value-of select=$text/ /xsl:otherwise /xsl:choose /xsl:template xsl:template match=/tns:echoOut xmlns:tns= http://www.example.org/Echo/;outxsl:call-template name=escapeNewLine xsl:with-param name=text select=./ /xsl:call-template/out/tns:echoOut /xsl:template /xsl:stylesheet *And Proxy : * ?xml version=1.0 encoding=UTF-8? proxy xmlns=http://ws.apache.org/ns/synapse; name=TestXSLT transports=http https startOnLoad=true trace=disable target inSequence xslt key=conf:xslt/Test.xslt source=//in/ respond/ /inSequence outSequence/ faultSequence/ /target publishWSDL key=conf:xslt/Echo.wsdl/ /proxy In above transformation, it replace all the space with \n. For following request. soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/; xmlns:echo=http://www.example.org/Echo/; soapenv:Header/ soapenv:Body echo:echo ina b c d /in /echo:echo /soapenv:Body /soapenv:Envelope Response will be like this. soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/; xmlns:echo=http://www.example.org/Echo/; soapenv:Body echo:echo text xmlns=http://ws.apache.org/commons/ns/payload;a\nb \n\n\n\n\n\n\n\n\nc\nd \n\n\n\n\n\n\n\n\n/text /echo:echo /soapenv:Body /soapenv:Envelope What could be the issue. ? I tried with both amp;#xA; and #xA still no luck. Thanks, Hasitha. -- Hasitha Aravinda, Software Engineer, WSO2 Inc. Email: hasi...@wso2.com Mobile: +94 71 8 210 200 TestXSLTCapp_1.0.0.car Description: Binary data ___ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev
Re: [Dev] [ESB][XSLT] Capturing #xA; (new line) and Replace it with in \n using XSLT.
Hi, As I understand your requirement is replacing line feed with '\n' I found following method, and works for me. Try following : ?xml version=1.0 encoding=UTF-8? xsl:stylesheet version=1.0 xmlns:xsl= http://www.w3.org/1999/XSL/Transform; xmlns:tns= http://www.example.org/Echo/; xsl:output method=text encoding=UTF-8 indent=yes/ xsl:variable name=_crlfxsl:text /xsl:text/xsl:variable xsl:template name=escapeNewLine xsl:param name=text select=string(.)/ xsl:choose xsl:when test=contains($text, $_crlf) xsl:value-of select=substring-before($text, $_crlf)/\nxsl:call-template name=escapeNewLine xsl:with-param name=text select=substring-after($text, $_crlf)/ /xsl:call-template /xsl:when xsl:otherwise xsl:value-of select=$text/ /xsl:otherwise /xsl:choose /xsl:template xsl:template match=/tns:echoOut xmlns:tns= http://www.example.org/Echo/;outxsl:call-template name=escapeNewLine xsl:with-param name=text select=./ /xsl:call-template/out/tns:echoOut /xsl:template /xsl:stylesheet [1] http://stackoverflow.com/questions/3541278/replace-r-n-newlines-using-xslt-and-net-c-sharp-vs-2008 Thanks, Milinda On Thu, Nov 20, 2014 at 3:35 AM, Hasitha Aravinda hasi...@wso2.com wrote: Hi team, I have requirement to replace #xA; character and replace it with \n using XSLT. So I came up with following XSLT and Proxy service. ( Capp is attached ) ?xml version=1.0 encoding=UTF-8? xsl:stylesheet version=1.0 xmlns:xsl= http://www.w3.org/1999/XSL/Transform; xmlns:tns= http://www.example.org/Echo/; xsl:output method=text encoding=UTF-8 indent=yes/ xsl:template name=escapeNewLine xsl:param name=text select=string(.)/ xsl:choose xsl:when test=contains($text, '#xA;') xsl:value-of select=substring-before($text, '#xA;')/\nxsl:call-template name=escapeNewLine xsl:with-param name=text select=substring-after($text, '#xA;')/ /xsl:call-template /xsl:when xsl:otherwise xsl:value-of select=$text/ /xsl:otherwise /xsl:choose /xsl:template xsl:template match=/tns:echoOut xmlns:tns= http://www.example.org/Echo/;outxsl:call-template name=escapeNewLine xsl:with-param name=text select=./ /xsl:call-template/out/tns:echoOut /xsl:template /xsl:stylesheet *And Proxy : * ?xml version=1.0 encoding=UTF-8? proxy xmlns=http://ws.apache.org/ns/synapse; name=TestXSLT transports=http https startOnLoad=true trace=disable target inSequence xslt key=conf:xslt/Test.xslt source=//in/ respond/ /inSequence outSequence/ faultSequence/ /target publishWSDL key=conf:xslt/Echo.wsdl/ /proxy In above transformation, it replace all the space with \n. For following request. soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/; xmlns:echo=http://www.example.org/Echo/; soapenv:Header/ soapenv:Body echo:echo ina b c d /in /echo:echo /soapenv:Body /soapenv:Envelope Response will be like this. soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/; xmlns:echo=http://www.example.org/Echo/; soapenv:Body echo:echo text xmlns=http://ws.apache.org/commons/ns/payload;a\nb \n\n\n\n\n\n\n\n\nc\nd \n\n\n\n\n\n\n\n\n/text /echo:echo /soapenv:Body /soapenv:Envelope What could be the issue. ? I tried with both amp;#xA; and #xA still no luck. Thanks, Hasitha. -- Hasitha Aravinda, Software Engineer, WSO2 Inc. Email: hasi...@wso2.com Mobile: +94 71 8 210 200 ___ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev -- Milinda Perera Software Engineer; WSO2 Inc. http://wso2.com , Mobile: (+94) 714 115 032 ___ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev
Re: [Dev] [ESB][XSLT] Capturing #xA; (new line) and Replace it with in \n using XSLT.
Yupe, That workaround worked. Thanks Milinda. On Thu, Nov 20, 2014 at 4:55 PM, Milinda Perera milin...@wso2.com wrote: Hi, As I understand your requirement is replacing line feed with '\n' I found following method, and works for me. Try following : ?xml version=1.0 encoding=UTF-8? xsl:stylesheet version=1.0 xmlns:xsl= http://www.w3.org/1999/XSL/Transform; xmlns:tns= http://www.example.org/Echo/; xsl:output method=text encoding=UTF-8 indent=yes/ xsl:variable name=_crlfxsl:text /xsl:text/xsl:variable xsl:template name=escapeNewLine xsl:param name=text select=string(.)/ xsl:choose xsl:when test=contains($text, $_crlf) xsl:value-of select=substring-before($text, $_crlf)/\nxsl:call-template name=escapeNewLine xsl:with-param name=text select=substring-after($text, $_crlf)/ /xsl:call-template /xsl:when xsl:otherwise xsl:value-of select=$text/ /xsl:otherwise /xsl:choose /xsl:template xsl:template match=/tns:echoOut xmlns:tns= http://www.example.org/Echo/;outxsl:call-template name=escapeNewLine xsl:with-param name=text select=./ /xsl:call-template/out/tns:echoOut /xsl:template /xsl:stylesheet [1] http://stackoverflow.com/questions/3541278/replace-r-n-newlines-using-xslt-and-net-c-sharp-vs-2008 Thanks, Milinda On Thu, Nov 20, 2014 at 3:35 AM, Hasitha Aravinda hasi...@wso2.com wrote: Hi team, I have requirement to replace #xA; character and replace it with \n using XSLT. So I came up with following XSLT and Proxy service. ( Capp is attached ) ?xml version=1.0 encoding=UTF-8? xsl:stylesheet version=1.0 xmlns:xsl= http://www.w3.org/1999/XSL/Transform; xmlns:tns= http://www.example.org/Echo/; xsl:output method=text encoding=UTF-8 indent=yes/ xsl:template name=escapeNewLine xsl:param name=text select=string(.)/ xsl:choose xsl:when test=contains($text, '#xA;') xsl:value-of select=substring-before($text, '#xA;')/\nxsl:call-template name=escapeNewLine xsl:with-param name=text select=substring-after($text, '#xA;')/ /xsl:call-template /xsl:when xsl:otherwise xsl:value-of select=$text/ /xsl:otherwise /xsl:choose /xsl:template xsl:template match=/tns:echoOut xmlns:tns= http://www.example.org/Echo/;outxsl:call-template name=escapeNewLine xsl:with-param name=text select=./ /xsl:call-template/out/tns:echoOut /xsl:template /xsl:stylesheet *And Proxy : * ?xml version=1.0 encoding=UTF-8? proxy xmlns=http://ws.apache.org/ns/synapse; name=TestXSLT transports=http https startOnLoad=true trace=disable target inSequence xslt key=conf:xslt/Test.xslt source=//in/ respond/ /inSequence outSequence/ faultSequence/ /target publishWSDL key=conf:xslt/Echo.wsdl/ /proxy In above transformation, it replace all the space with \n. For following request. soapenv:Envelope xmlns:soapenv= http://schemas.xmlsoap.org/soap/envelope/; xmlns:echo= http://www.example.org/Echo/; soapenv:Header/ soapenv:Body echo:echo ina b c d /in /echo:echo /soapenv:Body /soapenv:Envelope Response will be like this. soapenv:Envelope xmlns:soapenv= http://schemas.xmlsoap.org/soap/envelope/; xmlns:echo= http://www.example.org/Echo/; soapenv:Body echo:echo text xmlns=http://ws.apache.org/commons/ns/payload;a\nb \n\n\n\n\n\n\n\n\nc\nd \n\n\n\n\n\n\n\n\n/text /echo:echo /soapenv:Body /soapenv:Envelope What could be the issue. ? I tried with both amp;#xA; and #xA still no luck. Thanks, Hasitha. -- Hasitha Aravinda, Software Engineer, WSO2 Inc. Email: hasi...@wso2.com Mobile: +94 71 8 210 200 ___ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev -- Milinda Perera Software Engineer; WSO2 Inc. http://wso2.com , Mobile: (+94) 714 115 032 -- Hasitha Aravinda, Software Engineer, WSO2 Inc. Email: hasi...@wso2.com Mobile: +94 71 8 210 200 ___ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev