XSLT 转换未正确缩进
本文关键字:缩进 转换 XSLT | 更新日期: 2023-09-27 17:55:39
下面是一个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>
下面是 XSLT 转换的输出:
<div class="Field"><span class="Label">Name:</span><span class="Input"></span></div>
以下是我进行转换的方式:
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);
}
}
}
为什么格式不缩进?稍后在输出中,某些内容会缩进。不知道为什么。我正在寻找一种解决方案,该解决方案将遵循 XSLT 中指定的格式设置。此代码用于写入任何格式(XML,HTML,文本等),因此例如,我不想要仅适用于XML的特定代码。但是,如果我的 XSLT 具有 XML 输出并设置为缩进,则应遵守该输出。
默认情况下,XmlWriter
(此处由XslCompiledTransform
隐式使用)不会缩进您的 XML,也不会自动使用 XSLT 中特定的设置。
您可以向指定输出可以缩进的XmlWriter
显式提供设置,或者更好的方法是XmlWriter
使用 xslt 提供的设置:
XslCompiledTransform xslTransform = new XslCompiledTransform();
xslTransform.Load(xsltPath, new XsltSettings(true, true), new XmlUrlResolver());
using (XmlWriter writer = XmlWriter.Create(outputPath, xslTransform.OutputSettings))
{
using (StringReader stringReader = new StringReader(xml))
{
using (XmlReader xmlReader = XmlReader.Create(stringReader))
{
xslTransform.Transform(xmlReader, writer);
}
}
}
这很老了,但是当我遇到我认为是同一问题时,我遇到了它,但没有一个答案帮助我。将下面的标签添加到我的 xslt 后,我最终在转换后的 xml 上获得了正确的缩进。
<xsl:strip-space elements="*" />
我猜有一些空白把事情扔掉了。只是想把它放在这里,以防其他人像我一样偶然发现。
HTML不需要缩进,那你为什么呢?
如果确实需要缩进,请使用 XmlWriter 和 XmlWriterSettings 类写入 FileStream 对象。