Here you will find examples for most common testing issues that might be solved thanks to the XSLT transformations
Extraction of XML document packed in a field of other XML
If one the fields of the XML, for example <FieldWithData> contains in itself other XML as escaped text:
<Data> <FieldWithData><f1 a1="a1_val"><f2>val2</f2><f3>val3</f3></f1></FieldWithData> </Data>
you can extract it using below XSLT before IFTT XML comparison:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="FieldWithData/text()"> <xsl:value-of disable-output-escaping="yes" select="."/> </xsl:template> </xsl:stylesheet>
Using this technique will allow you to compare content of <FieldWithData> as XML not as a one long value of a single field.
In case this XML is in addition stored in the CDATA, you can try to reuse the following XSLT mapping:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:element name="FieldWithData"> <xsl:value-of select="//FieldWithData" disable-output-escaping="yes"/> </xsl:element> </xsl:template> </xsl:stylesheet>
XSLT for other encodings than UTF-8
In case your XML is encoded not in UTF-8 and you are missing some characters during output comparison in IFTT, you can use below simple XSLT that will remove encoding and allow XSLT engine to convert message to UTF-8. This is implicit XSLT engine conversion.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>