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);
}
如果您希望XslCompiledTransform作为XSLT转换的结果输出一个纯文本文件,那么您不应该转换为您创建的xmltextwwriter,而应该转换为FileStream或textwwriter
在源文档中有一个字符&结果是什么表示为
&
。
不要惊慌,因为没有问题:这与&
完全相同,因为它应该出现在任何格式良好的XML文档中。
您可以看到这是完全相同的字符,获取节点的字符串值并输出它—您将看到只有&
输出。
确定这只是&
字符的另一种方法是在XSLT中,当输出方法设置为"text"时输出它。下面是一个小而完整的例子:
:
<t>M & 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输出,&
编码是必需的。
在某些阶段,Xml元素的值将被使用,这就是&
再次成为&
的地方(以及何时)。