从XmlCompiledTransform中删除特殊字符

本文关键字:特殊字符 删除 XmlCompiledTransform | 更新日期: 2023-09-27 18:06:12

我正在取DataSet,将其加载到XmlDocument中,用XSLT文件转换它,并试图从我的输出文件中删除特殊字符。

缩写代码:

DataSet ds = GetData(); //queries database
XmlDocument doc = new XmlDocument();
doc.LoadXml(ds.GetXml());
XslCompiledTransform trans = new XmlCompiledTransform();
trans.Load("myTemplate.xslt");
XmlTextWriter writer = new XmlTextWriter("C:'output.xml", Encoding.GetEncoding("ISO-885901"));
trans.Transform(doc, null, writer);
writer.Close();
XSLT头

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

我认为它只是与编码有关,这就是为什么我把Encoding.GetEncoding("ISO-8859-1")放在那里,虽然我可能有错误的一个。具体来说,我需要从输出中删除像®这样的字符。如果不是编码的问题,我有没有办法把这些字符去掉?

从XmlCompiledTransform中删除特殊字符

你可以尝试使用正则表达式。这将删除所有的特殊字符

public static string RemoveSpecialCharacters(string specialCharacters)
{
    Regex regex = new Regex("(?:[^a-z0-9 ]|(?<=[''"])s)", RegexOptions.IgnoreCase |  RegexOptions.CultureInvariant | RegexOptions.Compiled);
    return regex.Replace(specialCharacters, String.Empty);
}

然后调整你的代码,这样你就可以保留一些你需要的特殊字符

显然,切换编码不是办法,因为这个字符在ISO-8859-1中存在,所以它仍然显示。切换到像ASCII这样的基本编码,只是把那些它不能识别的符号变成了问号。

我的解决方案是像Jhigs,但我不想循环通过DataSet行,手动应用一个正则表达式过滤器上的东西。我用了这个问题的答案:

通过XSLT从XML中删除特定标记的特殊字符

<Description>
    <xsl:value-of select="translate(DESC, '&lt;/&gt;&#x2122;&#xAE;', '')" />
</Description>