0

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

4

2 回答 2

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

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

于 2013-03-26T21:35:19.190 回答
0

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

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

仅针对特定标签通过 XSLT 从 XML 中删除特殊字符

<Description>
    <xsl:value-of select="translate(DESC, '&lt;/&gt;&#x2122;&#xAE;', '')" />
</Description>
于 2013-03-27T14:13:09.867 回答