But when I use Transformation via xsl in MobielFirst it throws error like below
errors": [ "non-hex digit on line 4, column 471", "The returned InvocationResult must be a valid JSON Object." ],
I found out it is caused through the Slash "\" which is present in my XML.
The same .XSL code works fine in others except in MobileFirst how to solve this error.
When I remove/comment "DESCRIPTION" <xsl:value-of select="DESCRIPTION" />
it works fine.
XML
<?xml version="1.0" encoding="UTF-8" ?>
<Envelope>
<Body>
<QueryResponse>
<CLASSIFICATIONSSet>
<CLASSSTRUCTURE>
<CLASSIFICATIONID>Kawin</CLASSIFICATIONID>
<CLASSSTRUCTUREID>1001</CLASSSTRUCTUREID>
<CLASSUSEWITH>
<OBJECTNAME>1</OBJECTNAME>
</CLASSUSEWITH>
<CLASSUSEWITH>
<OBJECTNAME>2</OBJECTNAME>
</CLASSUSEWITH>
<CLASSUSEWITH>
<OBJECTNAME>3</OBJECTNAME>
</CLASSUSEWITH>
<CLASSUSEWITH>
<OBJECTNAME>4</OBJECTNAME>
</CLASSUSEWITH>
<DESCRIPTION>End User Issue \ Telco</DESCRIPTION>
<HIERARCHYPATH>Good \ BAD</HIERARCHYPATH>
<OBJECTNAME>1</OBJECTNAME>
</CLASSSTRUCTURE>
</CLASSIFICATIONSSet>
</QueryResponse>
</Body>
</Envelope>
XSL
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:h="http://www.w3.org/1999/xhtml"
>
<xsl:output method="text"/>
<xsl:template match="/">
{
'ClassificationData': [
<xsl:for-each select="*//CLASSSTRUCTURE">
{
"CLASSSTRUCTUREID" : '<xsl:value-of select="CLASSSTRUCTUREID" />',
"DESCRIPTION" : '<xsl:value-of select="DESCRIPTION" />' ,
"CLASSIFICATIONID" : '<xsl:value-of select="CLASSIFICATIONID" />',
"OBJECTNAME" : '<xsl:value-of select="OBJECTNAME" />',
"CLASSUSEWITH" : [
<xsl:for-each select="CLASSUSEWITH">
{
"OBJECTNAME" : "<xsl:value-of select="OBJECTNAME" />"
} ,
</xsl:for-each>
]
},
</xsl:for-each>
]
</xsl:choose>
}
</xsl:template>
</xsl:stylesheet>
Finally i made the Adapter working by replacing "\" backward slash with " \\ " double backward slash and a space at the beggining and end of the Double slash.
XSL
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:h="http://www.w3.org/1999/xhtml">
<xsl:output method="text" encoding="ISO-8859-1" indent="yes"/>
<xsl:template match="/">
{
'ClassificationData': [
<xsl:for-each select="*//CLASSSTRUCTURE">
{
"CLASSSTRUCTUREID" : '
<xsl:value-of select="CLASSSTRUCTUREID" />',
<xsl:variable name="DESC">
<xsl:value-of select='DESCRIPTION' />
</xsl:variable>
<xsl:variable name="repString">
<xsl:call-template name="string-replace">
<xsl:with-param name="haystack" select="$DESC" />
<xsl:with-param name="search" select="'\'" />
<xsl:with-param name="replace" select="' \\ '" />
</xsl:call-template>
</xsl:variable>
"DESCRIPTION" : "
<xsl:value-of select='$repString'/>" ,
"CLASSIFICATIONID" : '
<xsl:value-of select="CLASSIFICATIONID" />',
"OBJECTNAME" : '
<xsl:value-of select="OBJECTNAME" />',
"CLASSUSEWITH" : [
<xsl:for-each select="CLASSUSEWITH">
{
"OBJECTNAME" : "
<xsl:value-of select="OBJECTNAME" />"
} ,
</xsl:for-each>
]
},
</xsl:for-each>
]
}
</xsl:template>
<xsl:template name="string-replace">
<xsl:param name="haystack" />
<xsl:param name="search" />
<xsl:param name="replace" select="''" />
<xsl:choose>
<xsl:when test="contains($haystack, $search)">
<xsl:value-of select="substring-before($haystack, $search)" />
<xsl:value-of select="$replace" />
<xsl:call-template name="string-replace">
<xsl:with-param name="haystack" select="substring-after($haystack, $search)" />
<xsl:with-param name="search" select="$search" />
<xsl:with-param name="replace" select="$replace" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$haystack" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>