删除无效字符,如'¥'从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"

你们能帮我找出这个问题的一般解决方案吗?

谢谢

删除无效字符,如'¥'从XML

如果假设ASCII字符是有效字符,则可以这样做:

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

ASCII字符的编码大于127