2015-07-04 57 views
0

我想驗證一個有錯誤的XML文件,但是這個錯誤是以兩種不同的格式報告的。我只想要一個事件,而且我喜歡哪種格式。獲取兩個XML驗證事件的一個錯誤

這是我所看到的:

[severity=FATAL_ERROR,message=cvc-enumeration-valid: Value 'G' is not facet-valid with respect to enumeration '[M, F]'. It must be a value from the enumeration.,locator=[node=null,object=null,url=null,line=-1,col=-1,offset=-1]] 
[severity=FATAL_ERROR,message=cvc-type.3.1.3: The value 'G' of element 'Gender' is not valid.,locator=[node=null,object=null,url=null,line=-1,col=-1,offset=-1]] 

我更喜歡2格式作爲它報告的元素。

目前我使用一個ValidationEventHandler簡單地打印事件出來,像這樣:

import javax.xml.bind.ValidationEvent; 
import javax.xml.bind.ValidationEventHandler; 

public class MessageValidationEventHandler implements ValidationEventHandler 
{ 
    @Override 
    public boolean handleEvent(ValidationEvent ve) 
    { 
     System.out.println(ve); 

     return true; 
    } 
} 

XSD文件(簡體)看起來是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="Message"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="Gender" type="STGenderCode" minOccurs="0"/> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
    <xsd:simpleType name="STGenderCode"> 
     <xsd:restriction base="xsd:string"> 
      <xsd:enumeration value="M"/> 
      <xsd:enumeration value="F"/> 
     </xsd:restriction> 
    </xsd:simpleType> 
</xsd:schema> 

有了這個XML:

<?xml version="1.0" encoding="utf-8"?> 
<Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="NexusMessage.xsd"> 
     <Gender>G</Gender> 
</Message> 

我該怎麼做才能知道這兩個事件是相關的,所以我可以意圖離子忽略一個 - 或 - 更好,但只有兩個事件中的一個。

我想爲客戶端生成一個報告來查看和/或更正錯誤,我不想報告兩次相同的錯誤。

如果還有其他方法可以做到這一點,我也會接受。

回答

0

來自架構處理器的錯誤報告永遠不會是理想的,除了可能通過過濾和小規模重新格式化之外,您幾乎沒有機會改進它。你可以嘗試一個不同的模式處理器來查看它的消息是否更符合你的口味,但總是會有像這樣的畸變。這個處理器可能會略微要求報告規範中的哪些子句被違反;經常有不止一個。另外,經常發生的情況是,在驗證程序中,不同級別的軟件提供了不同的信息,通常最容易告訴你某個日期被認爲是無效的,而在更高級別日期出現在您的來源。

+0

感謝您的回答 - 您能否提供其他處理器或技術? – BigMac66

+0

Java世界中明顯的替代XSD處理器是我自己的撒克遜產品。但是你幾乎肯定會發現其錯誤報告的某些方面更好,而其他方面則更糟糕(好吧,這無論如何都是品味的問題。) –

+0

謝謝 - 讓我們看看我們的錯誤報告口味是否兼容:) – BigMac66