- Моя текущая проверка не работает для схем XSD v1.1. Я пробовал много вещей, чтобы изменить это, но до сих пор безуспешно.
- Для меня не имеет значения, выполняется ли решение с помощью Saxon или Xerces (Редактировать: я не хочу тратить деньги на решение проблемы, и похоже, что проверка Saxon XSD1.1 не бесплатна, поэтому я должен придерживаться Ксерсес)
- Да, я уже искал SO для этого, но пока ни один из фрагментов кода не помог мне получить рабочую проверку.
- Код будет использоваться в плагине eclipse, если это имеет значение.
- Я добавил следующий jar-файл в проект/путь к классам, однако похоже, что он не используется в моем коде:
<dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.11.0</version> </dependency>
Вот код, который я использовал до сих пор для проверки (нет проблем с его сбросом, если его нельзя использовать для xsd1.1):
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;
import org.apache.xerces.parsers.DOMParser;
import org.apache.xerces.xni.parser.XMLInputSource;
....
public List<MyError> validate(File xmlFile) {
List<MyError> errors = null;
try {
DOMParser parser = new DOMParser();
parser.setFeature(XmlUtils.VALIDATION, true);
parser.setFeature(XmlUtils.VALIDATION_SCHEMA, true);
parser.setFeature(XmlUtils.ALL_SCHEMA_LOCATIONS, true);
parser.setFeature(XmlUtils.DEFER_NODE_EXPANSION, false);
Handler handler = new Handler(xmlFile, parser);
parser.setErrorHandler(handler);
// there probably are smarter ways to do this
String uri = xmlFile.toURI().toString().replace("%20", " ");
InputStream inputStream = new FileInputStream(xmlFile);
XMLInputSource inputSource = new XMLInputSource("", uri, uri, inputStream, "UTF-8");
parser.parse(inputSource);
errors = handler.getErrors();
}
catch (Exception e)
{
ConsoleHandler.printError("Document " + xmlFile.getName() + " has not been parsed correctly: " + e.getMessage(), true);
ConsoleHandler.printStackTrace(e);
}
// printing the errors happens in some other method
return errors;
}