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