【发布时间】:2011-08-21 00:12:50
【问题描述】:
这是一个 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 的输出并且设置为缩进,那么这应该被尊重。
【问题讨论】:
-
那么你是如何运行转换的?
xsl:output是否被兑现取决于您如何运行转换,如果您使用 msdn.microsoft.com/en-us/library/ms163431.aspx,例如当您写入文件时,则xsl:output被兑现。写入流时也是如此。如果您写入 XmlWriter,则不会使用xsl:output,除非您使用例如创建编写器。XslCompiledTransform p = new XslCompiledTransform(); p.Load("sheet.xsl"); using (XmlWriter xw = XmlWriter.Create("result.html", p.OutputSettings)) { // call Transform here }. -
谢谢,我已经添加了有关如何进行转换的详细信息。
-
为了解决您的问题,还必须提供 XML 文档(尽可能小)。请。
标签: c# .net xml transform xslt