1
4

2 回答 2

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();
                        }
                    }
                }
            }
        }
    }
于 2013-11-09T17:58:12.593 回答
0

您需要将这些字符替换为数字字符引用。类似于您如何将 > 和 < 替换为 & gt; 和 & lt;,你可以用 & #931; 之类的东西替换这些字符。或任何引用这些特定字符的内容。

编辑:我必须在 & 之后添加一个空格,以避免编辑器实际拾取和解释字符。只需删除正在使用的空间 - 你明白了。

于 2013-11-09T17:20:25.470 回答