Closing tags when extracting HTML from XML

armadodigital

New Member
I am transforming a mixed html and xml document using an xslt stylesheet and extracting only the html elements.Source file:\[code\]<?xml version="1.0" encoding="utf-8" ?><html > <head> <title>Simplified Example Form</title> </head> <body> <TLA:document xmlns:TLA="http://www.TLA.com"> <TLA:contexts> <TLA:context id="id_1" value=""></TLA:context> </TLA:contexts> <table id="table_logo" style="display:inline"> <tr> <td height="20" align="middle">Big Title Goes Here</td> </tr> <tr> <td align="center"> <img src="http://stackoverflow.com/questions/15897500/logo.jpg" border="0"></img> </td> </tr> </table> <TLA:page> <TLA:question id="q_id_1"> <table id="table_id_1"> <tr> <td>Label text goes here</td> <td> <input id="input_id_1" type="text"></input> </td> </tr> </table> </TLA:question> </TLA:page> <!-- Repeat many times --> </TLA:document> </body></html>\[/code\]Stylesheet:\[code\]<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:TLA="http://www.TLA.com" exclude-result-prefixes="TLA"> <xsl:output method="html" indent="yes" version="4.0" /> <xsl:strip-space elements="*" /> <xsl:template match="@*|node()" priority="-2"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- This element-only identity template prevents the TLA namespace declaration from being copied to the output --> <xsl:template match="*"> <xsl:element name="{name()}"> <xsl:apply-templates select="@* | node()" /> </xsl:element> </xsl:template> <!-- Pass processing on to child elements of TLA elements --> <xsl:template match="TLA:*"> <xsl:apply-templates select="*" /> </xsl:template></xsl:stylesheet>\[/code\]Output:\[code\]<html> <head> <META http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Simplified Example Form</title> </head> <body> <table id="table_logo" style="display:inline"> <tr> <td height="20" align="middle">Big Title Goes Here</td> </tr> <tr> <td align="center"><img src="http://stackoverflow.com/questions/15897500/logo.jpg" border="0"></td> </tr> </table> <table id="table_id_1"> <tr> <td>Label text goes here</td> <td><input id="input_id_1" type="text"></td> </tr> </table> </body></html>\[/code\]However there's a problem in that the meta, img, and input elements are not being closed correctly. I've set the xsl:output to html and the version to 4.0 so as far as I know they should output correct html.I'm guessing that there needs to be a subtle change in the first xsl:template/xsl:copy instruction but my xslt skills are highly limited.What change needs to be made to get the tags to close correctly?P.S. I'm not sure if there's a difference between different tools/parsers but I'm using Visual Studio 2012 to debug the stylesheet so that I can see the immediate effect of any changes.
 
Back
Top