2016-07-05 41 views
3

我有一個XSD和不正確的XML。當強制元素從序列複雜類型中缺失時XSD驗證錯誤

XSD的複雜類型爲序列元素。所有這些元素都是強制性的。 (XSD由第三方維護,不能更改

不正確的XML缺少一個元素。

當我使用C#驗證XML對XSD時,預期的錯誤是「'XXX'元素預計」。但實際上,它也告訴我「元素有無效的子元素」。我不知道我該怎麼做。

爲了幫助你理解我的問題,我會告訴你一個例子:

<!-- Incorrect XML --> 
<class> 
    <el1>222</el1> 
    <el3>222</el3> 
</class> 

<!-- XSD --> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="class"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element type="xs:short" name="el1" /> 
     <xs:element type="xs:short" name="el2" /> 
     <xs:element type="xs:short" name="el3"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

的真實的,但意外的驗證錯誤是類似於下面:

元素「類」無效子元素'el3'。預計可能的元素列表:'el2'。

預期的錯誤是:

預期可能元素的列表: 'EL2'。

+0

我不認爲這個錯誤是必然的。錯誤輸出告訴你,它實際上預計爲''元素時,它會觸發一個''元素。而從驗證的角度來看,它應該還是失敗了,只是出現了你沒有想到的錯誤信息。 –

+0

謝謝Tim,我認爲你是對的。 – Charlie

回答

1

你誤解了這條信息。這是不是el3永遠不可能是class的孩子。這就是說el3在解析過程中遇到它時是無效的。

換句話說,如前所述,

元素 '類' 具有無效子元素 'EL3'。

是正確的。

在另一方面,你解釋郵件的方式,

元素「類」絕不能有子元素「EL3」。

確實是不正確的。但是,由於實際上並沒有這麼說,所以診斷消息是如此。

+0

謝謝@kjhughes。但是,我沒有像你所說的那樣解釋信息。我知道消息_元素'class'具有無效的子元素'el3'。_是正確的,我只是希望如果有任何機會,我只收到一條消息說_列表可能的元素預期:'el2'._ – Charlie

+0

也許你的意思是*期望*,而不是*預期*然後。那麼你的問題的答案是,是的,如果你想覆蓋默認的錯誤處理程序行爲,你可以寫任何你想要的消息;坦率地說,然而,我並不認爲這是值得的。 – kjhughes

+0

是的,我說服了我的同事們就這樣離開了。順便說一句,正如你所提到的,「你可以寫任何你想要的信息」,如果你能給我一些我可以看到的提示或鏈接,那該多好? – Charlie