gpt4 book ai didi

java - 使用 java.xml.validator 针对 XSD 验证 XML 时如何获得更具体的错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:14 24 4
gpt4 key购买 nike

在搜索了针对 XSD 验证我的 XML 的最佳方法之后,我遇到了 java.xml.validator。

我首先使用 API 中的示例代码并添加了我自己的 ErrorHandler

// parse an XML document into a DOM tree
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = parser.parse(new File("instance.xml"));

// create a SchemaFactory capable of understanding WXS schemas
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

// load a WXS schema, represented by a Schema instance
Source schemaFile = new StreamSource(new File("mySchema.xsd"));
Schema schema = factory.newSchema(schemaFile);

// create a Validator instance, which can be used to validate an instance document
Validator validator = schema.newValidator();

// Add a custom ErrorHandler
validator.setErrorHandler(new XsdValidationErrorHandler());

// validate the DOM tree
try {
validator.validate(new DOMSource(document));
} catch (SAXException e) {
// instance document is invalid!
}

...

private class XsdValidationErrorHandler implements ErrorHandler {
@Override
public void warning(SAXParseException exception) throws SAXException {
throw new SAXException(exception.getMessage());
}

@Override
public void error(SAXParseException exception) throws SAXException {
throw new SAXException(exception.getMessage());
}

@Override
public void fatalError(SAXParseException exception) throws SAXException {
throw new SAXException(exception.getMessage());
}
}

这工作正常,但是,传递给我的 XsdValidationErrorHandler 的消息并没有给我任何指示,指出有问题的 XML 在文档中的确切位置:

"org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'X'. One of '{Y}' is expected."

有没有办法让我覆盖或插入 validator 的另一部分,这样我就可以定义我自己的错误消息发送到 ErrorHandler 而不必重写所有代码?

我应该使用不同的库吗?

最佳答案

try catch SaxParseException,它是 SaxException 的后代。如果你得到其中之一,它有方法 getLineNumber()、getColumnNumber() 等。

关于java - 使用 java.xml.validator 针对 XSD 验证 XML 时如何获得更具体的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com