Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML文档中存在错误(1,1)_C#_Xml - Fatal编程技术网

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

C# XML文档中存在错误(1,1),c#,xml,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 = XmlR

我一直在尝试从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();
   <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>
此外,数据结构如下所示:

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 = 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();
   <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>

1020
日产
森特拉
1010
丰田
花冠
1111
本田
一致

等待帮助。提前谢谢

你能用记事本打开它并验证内容是否符合你的要求吗?如果出现以下情况,您将看到该错误:

  • 文件中没有任何内容
  • 文件中的xml无效或格式不正确
  • xml的架构与指定的架构不同
也可能是因为您没有定义Xml声明头(取决于您使用的Xml规范版本):

例如:

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

请参见

您的代码工作正常(有XML声明和没有XML声明),问题很可能是XML文件的内容。我猜编码被破坏了,或者有一些隐藏的特殊字符看起来像普通字符,但却是其他字符(例如<符号)


在我的例子中,不知何故,序列化程序中有一个bug。我不确定是图书馆还是逻辑

要检查您是否有与我相同的案例:

  • 从数据库列复制XML
  • 打开记事本
  • 将xml粘贴到记事本中
  • 拯救
它会告诉你它有问题:

如果继续按“确定”,则再次打开该文件。这里会有一个问号:

为了解决这个问题,在反序列化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;
}
私有静态字符串验证(字符串xml)
{
if(string.IsNullOrEmpty(xml))
返回xml;
尝试
{

var index=xml.IndexOf('是否需要标准的xml前缀(
)?嗨,Steve,我添加了一行:,但我仍然得到了相同的错误。你能建议其他的吗?如果序列化中有些东西不起作用,那么尝试同样的操作:创建你的对象,序列化到文件,看看你得到了什么。你能提供更多的异常输出吗?我确信XmlSerializer提供了更多的信息关于原因,可能在内部例外请您的问题分享完整的
ToString()
异常的输出,包括异常类型、消息、回溯和内部异常(如果有)。我刚刚添加了上面的行,但仍然面临相同的错误。您现在有什么建议?您的进程是否具有写入路径的读/写权限?您能在Internet Explorer中打开该文件吗?IE具有内置的验证机制m这有时会有帮助。嗨,戴夫,我试着用IE打开它,但我看不到那里的内容?我怎样才能让IE访问它呢?我想,如果IE能看到内容,我的代码也会自动运行,对吗?就这样。文件已损坏(或与预期不同)。序列化引擎无法理解文档中的结构。您所说的“完全不同”是什么意思?可能这就是“损坏”的意思.XML不是某种特殊的格式,应该可以在普通记事本中正确查看。我使用记事本+++“原样”复制并保存了您的示例XML。我也可以复制此结果。代码已按提供的格式成功反序列化。嗨,李,非常感谢您的回复。我有另一个格式正确的XML文件,IE也可以查看。但是,现在,我得到了一个错误“XML文档(1,2)中有一个错误。”这种情况的原因是什么?我不明白。这是我的工作示例项目