XML文档中存在错误(1,1)

时间:2017-11-14 22:17:37

标签: c# xml

我一直在尝试从XML读取数据。当我尝试反序列化它时,我收到以下错误:

  

“XML文档(1,1)中存在错误。”

供您参考,我附上我的整个代码以及我的xml文件。

C#代码:

CarCollection cars = null;
string path = @"C:\Users\harsha\Desktop\Doc.xml";
XmlSerializer serializer = new XmlSerializer(typeof(CarCollection));
var reader = XmlReader.Create(path);
cars = (CarCollection)serializer.Deserialize(reader);
reader.Close();

此外,数据结构如下:

namespace XMLDataReader
{
   [Serializable()]
   public class Car
   {
       [System.Xml.Serialization.XmlElement("StockNumber")]
       public string StockNumber { get; set; }

       [System.Xml.Serialization.XmlElement("Make")]
       public string Make { get; set; }

       [System.Xml.Serialization.XmlElement("Model")]
       public string Model { get; set; }
   }

   [Serializable()]
   [System.Xml.Serialization.XmlRoot("CarCollection")]
   public class CarCollection
   {
       [XmlArray("Cars")]
       [XmlArrayItem("Car", typeof(Car))]
       public Car[] Car { get; set; }
   }

XML文件:

   <CarCollection>
<Cars>
  <Car>
    <StockNumber>1020</StockNumber>
    <Make>Nissan</Make>
    <Model>Sentra</Model>
  </Car>
  <Car>
    <StockNumber>1010</StockNumber>
    <Make>Toyota</Make>
    <Model>Corolla</Model>
  </Car>
  <Car>
    <StockNumber>1111</StockNumber>
    <Make>Honda</Make>
    <Model>Accord</Model>
  </Car>
</Cars>
</CarCollection>

等待一些帮助。提前谢谢!

3 个答案:

答案 0 :(得分:1)

你能用记事本打开它并确认内容符合你的期望吗?如果出现以下情况,您将看到错误:

  • 文件中没有任何内容
  • 文件中的xml无效或格式正确
  • xml的架构与指定的架构不同

也可能是因为您没有定义Xml声明标头(取决于您正在使用的xml规范的版本):

例如:

<?xml version="1.0" encoding="UTF-8" ?>

请参阅Does a valid XML file require an XML declaration?

答案 1 :(得分:1)

您的代码工作正常(使用和不使用XML声明),问题很可能是您的XML文件的内容。我想编码被打破了,或者有一些隐藏的特殊字符看起来像普通字符但是是其他东西(例如&lt; sign)。

enter image description here

答案 2 :(得分:1)

就我而言,串行器中存在一个错误。我不确定是库还是逻辑。

要检查您是否有和我一样的案例:

  • 从数据库列复制XML,
  • 打开记事本,
  • 将xml粘贴到记事本中,
  • 保存

它将告诉您它有问题: enter image description here

如果继续按“确定”,则再次打开文件。那里会有一个问号: enter image description here

为解决此问题,在反序列化xml字符串之前,我只需检查第一个字符是否为天使括号。如果不是,则删除该字符:

private static string Validate(string xml)
{
    if (string.IsNullOrEmpty(xml))
        return xml;

    try
    {
        var index = xml.IndexOf('<');
        if (index > 0)
            xml = xml.Substring(index);
    }
    catch { }

    return xml;
}