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