1

我在 xslt 文件转换的结果中转换了特殊字符。
有谁之前经历过这个吗?

在源文档中,有一个字符&在结果中显示为&. &即使在结果中我也需要原始字符。

XmlDataDocument dd = new XmlDataDocument(ds);

XsltSettings settings = new XsltSettings();
settings.EnableDocumentFunction = true;
settings.EnableScript = true;

XslCompiledTransform transform = new XslCompiledTransform();

transform.Load(XmlReader.Create(new StringReader(transformSource.Transform)), settings, new XmlUrlResolver());

XsltArgumentList a = new XsltArgumentList();

a.AddExtensionObject("http://www.4plusmedia.tv", new TransformationHelper());

using (XmlTextWriter writer = new XmlTextWriter(path, System.Text.Encoding.UTF8))
{
    writer.Formatting = Formatting.Indented;
    transform.Transform(dd, a, writer);
}
4

3 回答 3

1

你的输出部分是using (XmlTextWriter writer = ...) { ... }

这表明您的输出XML。您可以使用 XSLT 来生成纯文本,这会有所不同。

对于 XML 和 HTML 输出,&编码是必要且必不可少的。

在某个阶段,将使用您的 Xml 元素的值,这就是再次&成为 a的地方(和时间)。&

于 2011-11-18T15:27:27.647 回答
1

在源文档中有一个字符 & 在结果中显示为&.

不要惊慌,因为没有问题:这是完全相同的字符&,因为它应该出现在任何格式良好的 XML 文档中。

你可以看到这是完全相同的字符,获取节点的字符串值并输出它——你会看到只是&输出。

另一种确定这只是&字符的方法是在 XSLT 中在输出方法设置为“文本”时输出它。这是一个小而完整的示例:

XML 文档

<t>M &amp; M</t>

转型

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/*">
  <xsl:value-of select="."/>
 </xsl:template>
</xsl:stylesheet>

结果

M & M
于 2011-11-18T15:30:50.280 回答
1

如果您希望 XslCompiledTransform 作为 XSLT 转换的结果输出纯文本文件,则不应转换为您创建的 XmlTextWriter,而是转换为FileStreamTextWriter

于 2011-11-18T17:09:42.623 回答