Мне просто интересно, может ли кто-нибудь однажды дать мой код проверки XML, чтобы убедиться, что я делаю это правильно. Вот часть коды, который дает мне неприятность ...Проверка XML: правильно ли я это делаю?
SAXParserFactory factory = SAXParserFactory.newInstance();
SchemaFactory schemaFactory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// *** CODE FAILS ON THE BELOW LINE **/
factory.setSchema(schemaFactory
.newSchema(new Source[] { new StreamSource(schemaStream) }));
SAXParser parser = factory.newSAXParser();
SAXReader reader = new SAXReader(parser.getXMLReader());
reader.setValidation(false);
reader.setErrorHandler(new ResultProducingErrorHandler());
reader.read(content);
Всякий раз, когда я запускаю приведенный выше код, я получаю ошибку вдоль линий:
src-resolve: Cannot resolve the name 'ns:myStructure' to a(n) 'type definition' component.
элементов, упомянутых в сообщении об ошибке сообщения - все, которые импортируются в схему через вызовы < xs: import/>. Кажется, что схема проверяет ОК через W3C XML Schema Validator.
Должен ли я включать каждую из этих схем отдельно или достаточно умный Java, чтобы уйти и получить дополнительную схему? Я попытался добавить их в массив, переданный в вызов newSchema, но это не имело никакого значения.
Я не думаю, что могу передать ссылку на схему, поэтому я действительно ищу да или нет, если мой код выглядит как минимум приемлемым.
Пути - это только имена файлов (например, «abc.xsd»). Эти файлы живут в том же каталоге, что и исходная схема, поэтому я бы подумал, что они были бы доступны. Но тогда я мало знаю о схемах и импорте. –
Как и в случае теста, попробуйте предоставить весь путь к импортированным файлам в импортирующей схеме. – Eddie
Должен был попробовать это, прежде чем я отправил. С полными путями они работают нормально. Поэтому я предполагаю, что ws: import не относится к схеме, вызывающей импорт. Ну, по крайней мере, это означает, что это схема (которая должна быть доступна через Интернет), а не меня. Приветствия за помощь. –