删除无效字符,如'¥'从XML
本文关键字:#165 XML 无效 字符 删除 | 更新日期: 2023-09-27 18:02:43
我有一个XML文件,我从中读取了WCF服务中的几个标记。XML的格式如下:
....
<field type="text" name="name">ABCD EFGH</field>
<field type="text" name="address">XYZ</field>
<field type="text" name="details">Random Data --""¥ 5 </field>
....
可以看到,第三个标记获得随机数据。现在,我从XML中读取数据并执行一个过程,并将我在WCF web服务中创建的自定义XML文件传递给该过程:
<?xml version="1.0" encoding="utf-8"?>
<Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ItemList>
<Item>
<ColumnName>[name]</ColumnName>
<ColumnValue>ABCD EFGH</ColumnValue>
</Item>
<Item>
<ColumnName>[address]</ColumnName>
<ColumnValue>AJX-AA8-A6J-FQ</ColumnValue>
</Item>
<Item>
<ColumnName>[details]</ColumnName>
<ColumnValue>Random Data ¥ 5</ColumnValue>
</Item>
</ItemList>
</Root>
我在过程中解析XML文件,并将数据插入数据库。
我已经使用以下函数从XML中去掉了大多数特殊字符:
public static string CleanXMLString(String xmlText)
{
string pattern = "[''~#%&*{}/:<>?|'"'-]";
string replacement = "";
Regex regEx = new Regex(pattern);
string sanitized = regEx.Replace(xmlText, replacement);
return sanitized;
}
和
public static string RemoveInvalidXmlChars(string text)
{
if (IsValidXmlString(text))
{
var validXmlChars = text.Where(ch => XmlConvert.IsXmlChar(ch)).ToArray();
return new string(validXmlChars);
}
else
return "";
}
但是,我仍然无法摆脱某些特殊字符,如:¥
因此,在SQL Server 2008中执行该过程会导致返回"Invalid XML character"
你们能帮我找出这个问题的一般解决方案吗?
谢谢
如果假设ASCII
字符是有效字符,则可以这样做:
public string JustAscii(string source)
{
return new string(source.Where(c => c <= sbyte.MaxValue).ToArray());
}
无ASCII
字符的编码大于127