从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")
放在那里,虽然我可能有错误的一个。具体来说,我需要从输出中删除像®这样的字符。如果不是编码的问题,我有没有办法把这些字符去掉?
你可以尝试使用正则表达式。这将删除所有的特殊字符
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, '</>™®', '')" />
</Description>