我正在使用xsltUri
类将XSL-T文件TargetXmlFile
应用于XML文件XslCompiledTransform
:
XslCompiledTransform xslTransform = new XslCompiledTransform(false);
xslTransform.Load(xsltUri);
using (var outStream = new MemoryStream())
{
var writer = new StreamWriter(outStream, new UTF8Encoding());
using (var reader = new XmlTextReader(TargetXmlFileName)
{
WhitespaceHandling = WhitespaceHandling.All,
DtdProcessing = DtdProcessing.Ignore
})
{
xslTransform.Transform(reader, xsltArguments, writer);
}
outStream.Position = 0;
using (FileStream outFile = new FileStream(outputFileName, FileMode.Create))
{
outStream.CopyTo(outFile);
}
}
输入XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<element
id="1"
attr1="value11"
attr2="value12"/>
<element id="2" attr1="value21" attr2="value22"/>
</root>
输入XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//element[@id='2']/@attr1">
<xsl:attribute name="attr1">
<xsl:value-of select="'newvalue21'"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
实际输出XML:
<?xml version="1.0" encoding="utf-8"?><root>
<element id="1" attr1="value11" attr2="value12" />
<element id="2" attr1="newvalue21" attr2="value22" />
</root>
所需的输出XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<element
id="1"
attr1="value11"
attr2="value12"/>
<element id="2" attr1="newvalue21" attr2="value22"/>
</root>
问题: 如何在&#34;元素&#34;中保留输入XML文件的空格(特别是换行符)。输出XML文件中的标签?我已经尝试了不同的选项,但没有任何方法适用于这种情况。
感谢任何提示!
答案 0 :(得分:2)
这与XSLT无关。 XML文档模型中不存在您引用的空白,即使使用xml:space="preserve"
,它也不会对符合条件的XML处理器产生重要影响。在DOM中没有它的位置,它将被读者跳过;因此,无法将其复制到作者。您必须使用自定义代码(换句话说,不使用XmlWriter
)发出XML。
答案 1 :(得分:1)
标记的内部格式(属性之间的空格)在XML中完全是短暂的。
<
之后立即空格是非法的。 因此...