web 2.0

Lessons Learned: XMLWriter correct HTML elements laten sluiten

Vandaag had ik ruzie met het maken van HTML op basis van XML met een XSL stylesheet. De XMLTextWriter zorgde er voor dat lege HTML elements afgesloten werden als XML elementen. Een div werd als <div/> afgesloten inplaats van <div></div> dit zorgde voor slechte HTML en daardoor pagina's die er niet uitzagen. Het probleem zat in de XMLTextwriter van .Net. Deze heeft een setting OutputMethod die standaard op XML staat waardoor de elementen self closing zijn. Deze OutputMethod moet gezet worden op HTML, deze setting is echter internal en daardoor niet te wijzigen. 

De oplossing hievoor moet gezocht worden in het gebruiken van de settings die gezet worden in de XSL. 

In de XSL specificeer je de output methode

 

<xsl:output method="html" indent="yes" omit-xml-declaration="yes" />

 

In de code kunnen deze settings vervolgens weer overgenomen worden

 

XslCompiledTransform transformer = new XslCompiledTransform();
transformer.Load(xslFile);
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(xmlContent);
//Hier worden settings voor de HTML output methode overgenomen
XmlTextWriter xtw = XmlWriter.Create(htmlFile, transformer.OutputSettings);
transformer.Transform(xdoc.CreateNavigator(), xtw);

 

Met dank aan tek-tips.

Reacties zijn gesloten