Here is an XSLT:
<xsl:stylesheet version="1.0" xmlns:P="http://abc.com/Xyz.xsd" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="Thing">
<xsl:element name="div">
<xsl:attribute name="class">
<xsl:text>Field</xsl:text>
</xsl:attribute>
<xsl:element name="span">
<xsl:attribute name="class">
<xsl:text>Label</xsl:text>
</xsl:attribute>
<xsl:value-of select="$displayName"/>
<xsl:text>:</xsl:text>
</xsl:element>
<xsl:element name="span">
<xsl:attribute name="class">
<xsl:text>Input</xsl:text>
</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Here is the output of the XSLT Transformation:
<div class="Field"><span class="Label">Name:</span><span class="Input"></span></div>
Here is how I'm doing the transformation:
XslCompiledTransform xslTransform = new XslCompiledTransform();
xslTransform.Load(xsltPath, new XsltSettings(true, true), new XmlUrlResolver());
using (FileStream outputStream = File.Create(outputPath))
{
using (StringReader stringReader = new StringReader(xml))
{
using (XmlReader xmlReader = XmlReader.Create(stringReader))
{
xslTransform.Transform(xmlReader, outputStream);
}
}
}
Why is the format not indented? Later on in the output, some things are indented. Not sure why. I'm looking for a solution that will honor the format settings as specified in the XSLT. This code is used to write to any format (XML, HTML, text, etc.) so I don't want specific code that will only work with XML, for example. But if my XSLT has an output of XML and is set to indent, then that should be honored.
HTML does not require indentation, so why do you?
If you really need indentation, use the XmlWriter and XmlWriterSettings classes to write to the FileStream object.
This is pretty old, but I ran across it when I was experiencing what i believe to be the same issue and none of the answers helped me. I ended up getting the correct indentation on my transformed xml after adding the tag below to my xslt.
I guess there was some white space throwing things off. Just wanted to put it here in case someone else stumbles upon like I did.
By default
XmlWriter
(which here is being used implicitly byXslCompiledTransform
) does not indent your xml, and won't automatically use the settings speicifed in your xslt.You can either explicitly supply settings to an
XmlWriter
that specify that the output can be indented, or the better approach is to haveXmlWriter
use the settings supplied by the xslt: