2015-07-04 62 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