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

时间:2014-09-23 09:49:29

标签: c# xml xml-parsing xsd xsd2code

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

所以,我在 VS Express 2013 for Desktop 中打开了这个xml文件,然后点击了 XML - >生成架构菜单选项。这生成了两个XSD架构文件:

然后我编写了一个批处理脚本,该脚本使用 xsd.exe 工具(.NET SDK附带)从架构中生成C#类文件,如下所示:

@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

当我运行上面的批处理脚本时,它生成了以下C#类:

最后,我将其添加到测试控制台应用程序项目中,并尝试从我的XML文件生成一个对象,这个自动生成的类如下:

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;
    }
}

当测试程序运行时,我收到此错误:

enter image description here

这个错误是什么意思?以及如何修复它?

1 个答案:

答案 0 :(得分:0)

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

看看" Is it valid to specify xsi:type for an local complexType?"有关此错误的更多信息。

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

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

这可能是一个可行的解决方案,具体取决于用例:XML Serialized from xsd.exe generated code using substitution groups is invalid (invalid xsi:type error)