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>
我該怎麼做才能知道這兩個事件是相關的,所以我可以意圖離子忽略一個 - 或 - 更好,但只有兩個事件中的一個。
我想爲客戶端生成一個報告來查看和/或更正錯誤,我不想報告兩次相同的錯誤。
如果還有其他方法可以做到這一點,我也會接受。
感謝您的回答 - 您能否提供其他處理器或技術? – BigMac66
Java世界中明顯的替代XSD處理器是我自己的撒克遜產品。但是你幾乎肯定會發現其錯誤報告的某些方面更好,而其他方面則更糟糕(好吧,這無論如何都是品味的問題。) –
謝謝 - 讓我們看看我們的錯誤報告口味是否兼容:) – BigMac66