XML中的符号会导致解析错误

时间:2016-04-13 04:19:07

标签: c# .net xml

我目前正在处理由于字段值中的符号而无法使用XmlDocument Load方法解析的大型xml文件。例如,查看visual studio的屏幕截图。

是什么?黑钻是什么意思?它是十六进制字符吗?

enter image description here

我问题的第二部分。是否有可以编写的c#代码,搜索将xml文件加载到字符串中并找到所有这些符号?

    <root>
      <record>
        <field>field�field</field>
      </record>
    </root>
经过更多的研究后,我发现有一个“隐藏”的角色。角色是一个不间断的空间。根据XML规范https://www.w3.org/TR/xml/#charsets,非中断空间是否是有效的XML字符。非中断空间的十六进制ascii值为xA0。

Char :: =#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] / *任何Unicode字符,不包括代理块,FFFE和FFFF。 * /

1 个答案:

答案 0 :(得分:2)

好吧,我能够解析和反序列化上面的XML。

试试这个:

序列化类

public class root
{
    public record record { get; set; }
}
public class record
{
    public string field { get; set; }
}

C#代码

    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            try
            {
                var xmlDoc = new XmlDocument();
                xmlDoc.Load("D:\\TestXML.xml");
                // Deserialize the XML
                var Deserializer = DeserializeXml<root>(xmlDoc.DocumentElement.OuterXml);
                //Get number of occurrences of '�'
                int count = Deserializer.record.field.Split('�').Length - 1;
            }
            catch(Exception ex)
            {
                throw;
            }
        }
        public static T DeserializeXml<T>(string xml)
        {
            T result;
            XmlSerializer ser = new XmlSerializer(typeof(T));
            using (TextReader tr = new StringReader(xml))
            {
                result = (T)ser.Deserialize(tr);
            }
            return result;
        }
    }

UnitTest1 IMG Snapshot