2014-09-23 41 views
1

我有想解析成在C#的對象此XML文件:解析XML(使用由XSD.EXE生成的類) - 錯誤:有XML文檔中的誤差(83 8)

所以,我在VS快速打開2013這個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

這個錯誤是什麼意思?我該如何解決它?

+0

發佈發出的XML代碼。 – pid 2014-09-23 09:50:12

+0

對不起,你的意思是?我以爲我已經發布了我擁有的一切。 – Latheesan 2014-09-23 09:52:37

+0

我擁有的這個XML文件是從ChannelAdvisor API生成的,因此它不是手動創建的。因此,我不知道如何解決這個'xsi-type'錯誤。我是否在我的分析函數中將其從XML中省略? – Latheesan 2014-09-23 10:05:37

回答

0

從第一個鏈接(XML),我看到一個xsi:type在線83

看「Is it valid to specify xsi:type for an local complexType?」有關此錯誤的詳細信息。

據我可以告訴你需要在你的XSD中定義OrderLineItemItemResponse類型。

問題出在XML上,但解決方案在XSD中。您必須定義該類型才能使其合法並通過驗證。例如,第一個XSD定義爲OrderResponseDetailComplete。 XSD的OrderLineItemItemResponse在哪裏?

這可能是一個可行的解決方案,具體取決於使用情況:XML Serialized from xsd.exe generated code using substitution groups is invalid (invalid xsi:type error)

+0

XSD由VisualStudio生成 - 不是手動生成的。我如何讓VS正確生成XSD? – Latheesan 2014-09-23 10:07:21

+0

我已經嘗試過各種在線XML - > XSD生成器,它們都不是爲'OrderLineItemItemResponse'創建模式 - 任何想法爲什麼這是? – Latheesan 2014-09-23 10:15:06

+0

我用鏈接編輯了我的答案。 – pid 2014-09-23 10:16:50