【发布时间】:2015-03-19 01:36:37
【问题描述】:
使用 XSLT 编译转换时,我无法将输出完全格式化,它总是去除所有空格并且不是人类可读的形式。
但是,如果我通过 Visual Studio XSLT 调试器运行相同的转换,则输出会整齐地缩进。这是我的代码的样子:
XDocument xDoc = XDocument.Load(_xmlFilePath, LoadOptions.PreserveWhitespace);
var xslDoc = new XmlDocument();
xslDoc.Load(_xsltFilePath);
xslDoc.PreserveWhitespace = true;
using (Stream outputFile = File.Create(_outputFileName))
{
XsltArgumentList xsltParameter = null;
StringReader tr = new StringReader(xslDoc.OuterXml);
XmlReader xr = new XmlTextReader(tr);
XslCompiledTransform transform = new XslCompiledTransform();
XsltSettings setting = new XsltSettings();
setting.EnableScript = true;
transform.Load(xr, setting, new XmlUrlResolver());
transform.Transform(xDoc.CreateReader(), xsltParameter, outputFile);
}
转换将创建一个文本文件,Visual Studio 的 XSLT 调试器在保留输出格式方面有何不同?
这个链接我已经看过了:XSLT Transform not indenting properly
当我输出到文本时,这不适用于我。我应该使用 Stream 以外的东西吗?
我的示例 XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="root">
<xsl:text>{Start:</xsl:text>
<xsl:text disable-output-escaping="yes">
</xsl:text>
<xsl:value-of select="Child1"/>
<xsl:text disable-output-escaping="yes">
</xsl:text>
<xsl:value-of select="Child2"/>
<xsl:text disable-output-escaping="yes">
</xsl:text>
<xsl:text>End:}</xsl:text>
</xsl:template>
<?xml version="1.0" encoding="utf-8"?>
<root>
<Child1>Value1</Child1>
<Child2>value2</Child2>
</root>
预期输出:
{Start:
Value1
value2
End:}
XSLT 编译转换的输出:
{Start:Value1value2End:}
Visual Studio XSLT 调试器为我提供了预期的输出格式,但 XSLT Compiled 转换去除了所有空格和新行。
【问题讨论】:
-
请更清楚地说明您的问题。请通过包括每种输出的实际示例,准确地解释您现在得到什么输出,以及您想要什么输出?请提供a good, minimal, complete code example,清楚地说明您的问题。
-
添加了我的示例,如果您需要其他任何东西,请告诉我
-
当您使用
&#xD;&#xA;作为行尾时会发生什么? Windows 使用 CR/LF 作为行尾,而不仅仅是 CR。一些应用程序可能只接受 CR 或两者旁边的 LF。 -
仍然产生相同的输出,没有空格它与使用 Stream 或 TextWriter 有关吗?与 XMlWriter 不同,我无法指定 outputsettings 属性来尊重 XSl 的格式?
标签: xslt-1.0 xslcompiledtransform outputformat