我在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);
}
答案 0 :(得分:1)
您的输出部分为using (XmlTextWriter writer = ...) { ... }
这表示您的输出是 XML。您可以使用XSLT生成纯文本,这将是不同的。
对于XML和HTML输出,&
编码是必要且必不可少的。
在某个阶段,将使用您的Xml元素的值,即&
再次成为&
的位置。
答案 1 :(得分:1)
在源文档中有一个角色&结果是哪个 提交为
&
。
不要因为没有问题而恐慌:这是完全相同的字符&
,因为它应该在任何格式良好的XML文档中呈现。
你可以看到这是完全相同的字符,得到节点的字符串值并输出它 - 你会看到只输出&
。
另一种确定这只是&
字符的方法是在XSLT中输出方法设置为“text”时输出它。这是一个小而完整的例子:
XML文档:
<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
答案 2 :(得分:1)
如果您希望XslCompiledTransform在XSLT转换时输出纯文本文件,则不应转换为您创建的XmlTextWriter,而应转换为FileStream或TextWriter。