2009-03-03 4 views
0

Мне просто интересно, может ли кто-нибудь однажды дать мой код проверки 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, но это не имело никакого значения.

Я не думаю, что могу передать ссылку на схему, поэтому я действительно ищу да или нет, если мой код выглядит как минимум приемлемым.

ответ

1

Убедитесь, что операторы xs: import указывают на пути, доступные из текущего каталога вашего приложения. Текущий каталог может быть не таким, как вы думаете.

+0

Пути - это только имена файлов (например, «abc.xsd»). Эти файлы живут в том же каталоге, что и исходная схема, поэтому я бы подумал, что они были бы доступны. Но тогда я мало знаю о схемах и импорте. –

+0

Как и в случае теста, попробуйте предоставить весь путь к импортированным файлам в импортирующей схеме. – Eddie

+0

Должен был попробовать это, прежде чем я отправил. С полными путями они работают нормально. Поэтому я предполагаю, что ws: import не относится к схеме, вызывающей импорт. Ну, по крайней мере, это означает, что это схема (которая должна быть доступна через Интернет), а не меня. Приветствия за помощь. –

 Смежные вопросы

  • Нет связанных вопросов^_^