Hello Team,
We are seeing some issues with the XSLT transformation with iOS14 version(starting 14.1 version) and this was working fine in earlier versions.
Issue : When an XSLT transformation is done using transformToDocument, we are observing that the anchor tag has the href attribute removed. Please refer to below example.
Sample usage :
Sample line from XSL file :
Expected :
Actual :
The UX is broken due to this as the links are no longer clickable with the href attribute being removed.
However, when the href contains the link(as below) - this works as expected.
Sample line from XSL file :
Expected :
Actual :
Any help on this would be very much appreciated. Looking forward for a quick response
I have enclosed the sample HTML and the XSL file for reference.
HTML :
XSL file :
We are seeing some issues with the XSLT transformation with iOS14 version(starting 14.1 version) and this was working fine in earlier versions.
Issue : When an XSLT transformation is done using transformToDocument, we are observing that the anchor tag has the href attribute removed. Please refer to below example.
Sample usage :
Code Block new XSLTProcessor().importStylesheet(xsl_file)).transformToDocument(newParsedXML)
Sample line from XSL file :
Code Block <td><a href="javascript:alert(1)"><xsl:value-of select="catalog/cd/address"/></a></td>
Expected :
Code Block <a href="javascript:alert(1)">Bangalore</a>
Actual :
Code Block <a>Bangalore</a>
The UX is broken due to this as the links are no longer clickable with the href attribute being removed.
However, when the href contains the link(as below) - this works as expected.
Sample line from XSL file :
Code Block <td><a href="https://www.google.com"><xsl:value-of select="catalog/cd/artist"/></a></td>
Expected :
Code Block <a href="https://www.google.com">ArtistName</a>
Actual :
Code Block <a href="https://www.google.com">ArtistName</a>
Any help on this would be very much appreciated. Looking forward for a quick response
I have enclosed the sample HTML and the XSL file for reference.
HTML :
Code Block <!doctype html> <html> <head> <meta charset="utf-8"> <title>Blank Form</title> <h1>SAMPLE HTML PAGE</h1> </head> <body> <button onclick="doTransform()">Click for XSLT Transformation</button> <div class="add-info" style="display: none;"> <br> <h3> Transformed XML Document </h3> : <span id="disp-div"></span> </div> <script> function doTransform() { //Create the XML var sampleXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><catalog><cd><title>Test Title</title><artist>CLICK ME!</artist></cd></catalog>"; var parser = new DOMParser(); var newParsedXML = parser.parseFromString(sampleXML, "text/xml"); //Load the XSLT file var response = getData("../../../assets/xslt/emxSampleXSL.xsl"); var dom = document.implementation.createDocument("", "", null); // dom.loadXML(response); var objDOMParser = new DOMParser(); var objDoc = objDOMParser.parseFromString(response, "text/xml"); while (dom.hasChildNodes()) dom.removeChild(dom.lastChild); for (var i=0; i < objDoc.childNodes.length; i) { var objImportedNode = dom.importNode(objDoc.childNodes[i], true); dom.appendChild(objImportedNode); } //Create XSLT Processor var xslProcess = new XSLTProcessor(); xslProcess.importStylesheet(dom); //Transform the sample XML with the XSLT var transformedXML = xslProcess.transformToDocument(newParsedXML); console.log("---transformedXML---> "+transformedXML); document.getElementsByClassName('add-info')[0].style.display = 'inline'; document.getElementById('disp-div').innerHTML = new XMLSerializer().serializeToString(transformedXML); } function getData(sPath, fnCallback){ var objHTTP = new XMLHttpRequest; objHTTP.open("get", sPath, fnCallback != null); objHTTP.send(null); try { return objHTTP.responseText; } finally { objHTTP = null; } } function loadXML(response){ var objDOMParser = new DOMParser(); var objDoc = objDOMParser.parseFromString(response, "text/xml"); while (this.hasChildNodes()) this.removeChild(this.lastChild); for (var i=0; i < objDoc.childNodes.length; i) { var objImportedNode = this.importNode(objDoc.childNodes[i], true); this.appendChild(objImportedNode); } } </script> </body> </html>
XSL file :
Code Block <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="link"> <xsl:template match="/"> <html> <body> <h2> My Data : </h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> <th>Address</th> </tr> <tr> <td><xsl:value-of select="catalog/cd/title"/></td> <td><a href="link"><xsl:value-of select="catalog/cd/artist"/></a></td> <td><a href="javascript:alert(1)"><xsl:value-of select="catalog/cd/address"/></a></td> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet>