【发布时间】:2016-05-11 22:17:11
【问题描述】:
我使用默认的 javax.API.validator 来针对 XSD 验证 XML 文件,即 SAXParser
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File(schemaPath));
StreamSource XML = new StreamSource(new File(xmlPath));
XMLStreamReader reader = XMLInputFactory.newFactory().createXMLStreamReader(XML);
Validator validator = schema.newValidator();
validator.setErrorHandler(new BasicErrorHandler(reader));
validator.validate(new StAXSource(reader));
这是错误处理程序:
public class BasicErrorHandler implements ErrorHandler {
private XMLStreamReader reader;
public BasicErrorHandler(XMLStreamReader reader) {
this.reader = reader;
}
@Override
public void error(SAXParseException e) throws SAXException {
warning(e);
}
@Override
public void fatalError(SAXParseException e) throws SAXException {
warning(e);
}
@Override
public void warning(SAXParseException e) throws SAXException {
System.out.println(reader.getLocalName());
e.printStackTrace(System.out);
}
}
我可以通过调用 reader.getLocalName() 来获取无效的节点 但是我尝试了阅读器上的所有方法,但无法获得导致此异常的值。例如 id 我有一个标签为
<startDate>asdfasdf</startDate>
这是根据架构 (XSD) 的日期字段 从上面的代码中,我可以找到节点,即我可以发现 startDate 是无效字段。但是什么是无效的价值我无法推断出来。
有没有人工作过或遇到过类似的情况。
【问题讨论】:
标签: java validation xsd xml-parsing saxparser