xmltextwriter转换特殊字符

时间:2011-11-18 14:38:01

标签: c# xml xslt encoding xmltextwriter

我在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);
}

3 个答案:

答案 0 :(得分:1)

您的输出部分为using (XmlTextWriter writer = ...) { ... }

这表示您的输出 XML。您可以使用XSLT生成纯文本,这将是不同的。

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

在某个阶段,将使用您的Xml元素的值,即&再次成为&的位置。

答案 1 :(得分:1)

  

在源文档中有一个角色&结果是哪个   提交为&

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

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

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

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

答案 2 :(得分:1)

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