Проверяемый xml может принимать любой из них, но, очевидно, один раз для каждого xml.
Я не могу разглашать фактический xsd но давайте представим что-то подобное:
Код: Выделить всё
[...]
[...]
Мы не можем изменить способ это сделать , мы должны соблюдать его стандарт.
У нас также есть Java-код валидатора Jaxb, который уже работает нормально, это только его «очаг»:
Код: Выделить всё
// From parameters
String xmlCode = "[...]" // OMISSIS the content of the xml
String xsdFilePath = "com/sample/schema/xsd/Sample.xsd";
[...]
ByteArrayInputStream xmlInputStream = new ByteArrayInputStream(xmlCode.getBytes("UTF-8"));
SimpleHandler xmlParseHandler = new SimpleHandler();
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
schemaFactory.setErrorHandler(xmlParseHandler);
URL schemaURL = Thread.currentThread().getContextClassLoader().getResource(xsdFilePath);
Schema schema = schemaFactory.newSchema(schemaURL);
Validator schemaValidator = schema.newValidator();
schemaValidator.setErrorHandler(xmlParseHandler);
// Validate xml instance against the grammar.
schemaValidator.validate(new StreamSource(xmlInputStream));
if (xmlParseHandler.getSaxParseExceptionList() != null) {
logger.warn("WARNING : xml is not valid : " + xmlParseHandler.getSaxParseExceptionMessages().toString());
[...]
}
Итак, какой единственный корневой элемент был принят в текущий проверенный xml .
Проект получит очень большое количество этих XML-файлов, поэтому я хотел бы принять более легкое возможное решение (т. е. отсутствие дальнейшего DOM в памяти).
Это было бы еще лучше, если бы Jaxb сам мне сказал какой корневой элемент проверил XML после процесса проверки.
Подробнее здесь: https://stackoverflow.com/questions/792 ... lements-xs