我有一个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中执行该过程会导致返回“无效的XML字符”
你能帮助我解决这个问题的普遍解决方案吗?
由于
答案 0 :(得分:0)
如果假设ASCII
字符是有效字符,则可以使用以下字符完成:
public string JustAscii(string source)
{
return new string(source.Where(c => c <= sbyte.MaxValue).ToArray());
}
没有ASCII
个字符的代码大于127
。