从XML中删除“¥”等无效字符

时间:2015-07-15 10:18:46

标签: c# sql-server xml

我有一个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字符”

你能帮助我解决这个问题的普遍解决方案吗?

由于

1 个答案:

答案 0 :(得分:0)

如果假设ASCII字符是有效字符,则可以使用以下字符完成:

public string JustAscii(string source)
{
    return new string(source.Where(c => c <= sbyte.MaxValue).ToArray());
}

没有ASCII个字符的代码大于127