从XslCompiledTransform中删除特殊字符

时间:2013-03-26 20:05:39

标签: c# asp.net xslt encoding special-characters

我正在使用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")放在那里,虽然我可能有错误的。具体来说,我需要从输出中删除像®这样的字符。如果它不是编码,那么我有什么方法可以剥离这些字符吗?

2 个答案:

答案 0 :(得分:0)

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

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

然后只需调整您的代码,以便保留一些您需要的特殊字符

答案 1 :(得分:0)

显然切换编码不是一种方法,因为这个字符存在于ISO-8859-1中,所以它仍然显示出来。切换到像ASCII这样的基本编码,最终将那些无法识别的符号更改为问号。

我的解决方案就像Jhigs,但我不想循环遍历DataSet行,手动对事物应用正则表达式过滤器。我用了这个问题的答案:

Remove special characters from XML via XSLT only for specific tags

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