【发布时间】:2015-07-04 02:22:41
【问题描述】:
我正在尝试验证有错误的 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]]
我更喜欢第二种格式,因为它报告元素。
目前我正在使用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>
我必须做些什么才能知道这两个事件是相关的,这样我就可以有意忽略一个 - 或者 - 更好的是只有这两个事件之一。
我正在尝试生成报告以供客户查看和/或纠正错误,但我不想两次报告相同的错误。
如果有其他方法可以做到这一点,我也会对此持开放态度。
【问题讨论】:
标签: java xml jaxb sax xml-validation