Xmltextwriter转换特殊字符

本文关键字:特殊字符 转换 Xmltextwriter | 更新日期: 2023-09-27 18:15:17

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

Xmltextwriter转换特殊字符

如果您希望XslCompiledTransform作为XSLT转换的结果输出一个纯文本文件,那么您不应该转换为您创建的xmltextwwriter,而应该转换为FileStream或textwwriter

在源文档中有一个字符&结果是什么表示为&

不要惊慌,因为没有问题:这与&完全相同,因为它应该出现在任何格式良好的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

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

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

对于XML和HTML输出,&amp;编码是必需的。

在某些阶段,Xml元素的值将被使用,这就是&amp;再次成为&的地方(以及何时)。