加载具有特定字符的XML文件时出现XmlException

时间:2013-11-09 17:12:02

标签: c# xml exception character-encoding xmldocument

我需要使用XmlDocument类来加载XML文件:

var doc = new XmlDocument();
doc.Load(filename);

不幸的是,在我的XML中有一个XmlException时,我会使用特定的字符来表示我的数据,特别是我有一个如下节点:

<rect data="string with invalid characters: † ¶"/>

因此,禁用字符为:

如何在没有异常的情况下加载文件并将这些字符留在我的XML文件中?

2 个答案:

答案 0 :(得分:0)

您需要使用数字字符引用替换这些字符。与您如何替换&gt;类似和&lt;与&amp; GT;和&amp;你会用&amp;这样的东西替换那些字符#931;或任何引用这些特定字符的内容。

编辑:我必须在&amp;之后添加一个空格避免编辑实际上接受并解释角色。只需删除正在使用的空间 - 您就明白了。

答案 1 :(得分:0)

或者,如果您无法控制XML的源代码并且只需要读取数据库中的所有值,那么您可以使用XmlTextReader逐行读取xml,停止元素你知道可能包含坏数据,并读取该元素的字符。我过去必须这样做。像这样的东西

static void Main(string[] args)
    {
        var xtr = new XmlTextReader("");
        xtr.Normalization = false;

        while (xtr.Read())
        {
            if(xtr.IsStartElement("Row")) // My xml doc contains many row elements
            {
                var fields = new string[6];
                while(xtr.Read())
                {
                    for (int i = 0; i < 6; i++) // I know my xml only has six child elements per row
                    {
                        while(!xtr.IsStartElement())
                        {
                            xtr.Read(); // We're not interested in hitting the end elements
                        }

                        if(i == 1) // I know my special characters are in the second child element of my row
                        {
                            var charBuff = new char[255];
                            xtr.ReadChars(charBuff, 0, 255); // I know there will be a maximum of 255 characters

                            fields[i] = new string(charBuff);
                        }
                        else
                        {
                            fields[i] = xtr.ReadElementContentAsString();
                        }
                    }
                }
            }
        }
    }