Использование Xerces-j для проверки XML-документа
Я пытаюсь проверить документ XML с помощью Xerces-J.
Я хочу, чтобы валидатор подобрал и разрешил любые связанные файлы XSD или DTD (используя ссылки на schemalocation, nonamespaceschemalocationa и DOCTYPE). Кажется, что загрузка этих ресурсов может быть делегирована классу Resolver.
Однако все примеры, которые я видел, начинаются с создания валидатора из схемы.
Можно ли обойти это по-другому, попросить xerces проверить документ XML и загрузить ли он то, что ему нужно, или я должен сначала проанализировать файл XML в поисках ссылок на схемы, загрузить их, а затем создать валидатор из схем?
В идеальном мире валидатор также поддерживает xsd 1.1
1 ответ
Вы предоставляете парсеру EntityResolver для использования при поиске объявлений org.apache.xml.resolver. Но вы также можете предоставить свою собственную реализацию EntityResolver.
CatalogResolver resolver = new CatalogResolver();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(true);
dbf.setFeature("http://apache.org/xml/features/validation/dynamic", true);
DocumentBuilder parser = dbf.newDocumentBuilder();
parser.setEntityResolver(resolver);
Document doc = parser.parse(someFile);