Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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(使用xsd.exe生成的类)-错误:XML文档中存在错误(83,8)_C#_Xml_Xml Parsing_Xsd_Xsd2code - Fatal编程技术网

C# 解析XML(使用xsd.exe生成的类)-错误:XML文档中存在错误(83,8)

C# 解析XML(使用xsd.exe生成的类)-错误:XML文档中存在错误(83,8),c#,xml,xml-parsing,xsd,xsd2code,C#,Xml,Xml Parsing,Xsd,Xsd2code,我有一个XML文件,我想在C#中解析成一个对象: 001-0180914-5787994.xml() 因此,我在VS Express 2013 for Desktop中打开了这个xml文件,并单击了xml->Generate Schema菜单选项。这将生成两个XSD架构文件: 001-0180914-5787994.xsd() 001-0180914-57879941.xsd() 然后我编写了一个批处理脚本,它使用xsd.exe工具(随.NET SDK提供)从模式生成一个C#class文

我有一个XML文件,我想在C#中解析成一个对象:

  • 001-0180914-5787994.xml()
因此,我在VS Express 2013 for Desktop中打开了这个xml文件,并单击了xml->Generate Schema菜单选项。这将生成两个XSD架构文件:

  • 001-0180914-5787994.xsd()
  • 001-0180914-57879941.xsd()
然后我编写了一个批处理脚本,它使用xsd.exe工具(随.NET SDK提供)从模式生成一个C#class文件,如下所示:

@ECHO off
set xsdFile="C:\Users\Administrator\Desktop\test\001-0180914-5787994.xsd"
set outDirectory="C:\Users\Administrator\Desktop\test\out"
set xsdExeDir="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools"
set language="CS"
cd %xsdExeDir%
xsd.exe "%xsdFile%" "C:\Users\Administrator\Desktop\test\001-0180914-57879941.xsd" /c /out:"%outDirectory%" /l:"%language%"
pause
class Program
{
    static void Main(string[] args)
    {
        try
        {
            var order = Parse("001-0180914-5787994.xml");
            Console.WriteLine("Success !!!");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
        Console.WriteLine("Press any key to exit...");
        Console.Read();
    }

    public static OrderResponseDetailComplete Parse(String XMLFile)
    {
        var settings = new XmlReaderSettings();
        var obj = new OrderResponseDetailComplete();
        var reader = XmlReader.Create(XMLFile, settings);
        var serializer = new XmlSerializer(typeof(OrderResponseDetailComplete));
        obj = (OrderResponseDetailComplete)serializer.Deserialize(reader);
        reader.Close();
        return obj;
    }
}
当我运行上述批处理脚本时,它生成了以下C#类:

  • 001-0180914-57879941.cs()
最后,我将其添加到测试控制台应用程序项目中,并尝试从XML文件和自动生成的类中生成一个对象,如下所示:

@ECHO off
set xsdFile="C:\Users\Administrator\Desktop\test\001-0180914-5787994.xsd"
set outDirectory="C:\Users\Administrator\Desktop\test\out"
set xsdExeDir="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools"
set language="CS"
cd %xsdExeDir%
xsd.exe "%xsdFile%" "C:\Users\Administrator\Desktop\test\001-0180914-57879941.xsd" /c /out:"%outDirectory%" /l:"%language%"
pause
class Program
{
    static void Main(string[] args)
    {
        try
        {
            var order = Parse("001-0180914-5787994.xml");
            Console.WriteLine("Success !!!");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
        Console.WriteLine("Press any key to exit...");
        Console.Read();
    }

    public static OrderResponseDetailComplete Parse(String XMLFile)
    {
        var settings = new XmlReaderSettings();
        var obj = new OrderResponseDetailComplete();
        var reader = XmlReader.Create(XMLFile, settings);
        var serializer = new XmlSerializer(typeof(OrderResponseDetailComplete));
        obj = (OrderResponseDetailComplete)serializer.Deserialize(reader);
        reader.Close();
        return obj;
    }
}
当测试程序运行时,我收到以下错误:

这个错误意味着什么?如何修复它呢?

从第一个链接(XML)我在第83行看到一个
xsi:type

有关此错误的详细信息,请参阅“”

据我所知,您需要在XSD中定义
orderLineItemResponse
类型

问题在XML中,但解决方案在XSD中。您必须定义类型才能使其合法并通过验证。例如,第一个XSD定义了
OrderResponseDetailComplete
。哪里是
orderlineitemresponse
的XSD


这可能是一个可行的解决方案,具体取决于用例:。

发布发出的XML代码。对不起,你是什么意思?我想我已经发布了我所有的东西。这个XML文件是从ChannelAdvisor API生成的,所以它不是手动创建的。因此,我不知道如何修复这个
xsi类型的错误。我是否在解析函数中使用了XML?很抱歉您没有找到答案,但我想感谢您,因为您的代码片段帮助我将XML转换回正确的类。XSD是由VisualStudio生成的,而不是手动生成的。如何让VS正确生成XSD?我尝试了各种在线XML->XSD生成器,它们似乎都没有为
OrderlineItemResponse
创建模式-知道为什么吗?我看了答案;我认为这对我不起作用,因为生成的CS代码甚至没有
orderlineitemsresponse
的条目。正如您所说,解决方案在XSD中,我不知道如何手动修改它。。知道为什么VS没有为我生成这个吗?我不知道。您应该在XSD中搜索
Complextype
或嵌套类型。您使用的工具可能受到限制,或者在某个地方有一个选项。