Код SAXParseException cvc-elt.1 для заданного xsd/xml

Вопрос: У меня есть заданный xsd файл и приведены примеры для этого файла. xsd очень похож на , но с одним дополнительным элементом ниже корня. Проблема в том, что я проверяю данный xml на схему (используя moxy как JAXBCOntextFactory), я получил эту ошибку: enterCaused by: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 221; cvc-elt.1: Cannot find the declaration

Вопрос:

У меня есть заданный xsd файл и приведены примеры для этого файла. xsd очень похож на , но с одним дополнительным элементом ниже корня.

Проблема в том, что я проверяю данный xml на схему (используя moxy как JAXBCOntextFactory), я получил эту ошибку:

enterCaused by: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 221; cvc-elt.1: Cannot find the declaration of element ‘invoice:request’.

invoice: request – это корневой элемент, начинающийся с xml:

<invoice:request role=»production» xmlns:invoice=»http://www.medidata.ch/QO/XSD» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi:schemaLocation=»http://www.medidata.ch/QO/XSD QO_MDInvoiceRequest_400.xsd»>

Если я проверяю xml на схему онлайн или в eclipse (проверка правильности щелчка правой кнопкой мыши), все работает нормально. И если я изменил пространство имен из

xmlns:invoice=»http://www.medidata.ch/QO/XSD»

в

xmlns:invoice=»http://www.xmlData.ch/xmlInvoice/XSD»

ошибка исчезает, но я получаю другую из-за дополнительного элемента. С этим объявлением пространства имен я даже не могу прочитать содержимое без проверки: getter for root возвращает null. С альтернативной декларацией (” “) и без проверки все работает нормально!

Итак, что случилось с объявлением пространства имен?

Лучший ответ:

Ошибка говорит, что документ не действителен, потому что нет определения для элемента с локальным именем request и префикс пространства имен invoice. В вашем документе экземпляра есть привязка пространства имен для этого указателя местоположения префикса и схемы для одного и того же URI пространства имен, так что эта часть кажется правильной.

Проверьте схему на наличие следующих проблем:

  1. Является ли целевое пространство имен схемы таким же, как и для корневого элемента вашего документа (здесь
  2. Существует ли объявление глобального элемента для элемента с тем же локальным именем, что и ваш корневой элемент (здесь request)
  3. Если ваш корневой элемент объявлен в схеме с префиксом пространства имен, это префикс, привязанный к тому же самому URI пространства имен, который используется в вашем документе

Если какой-либо из них неверен, ваш документ недействителен. (Иногда могут возникнуть другие проблемы в вашей схеме или в XML-документе экземпляра, что делает его недействительным.)

Обычно (если ваш XML-документ действительно действителен) такая проблема вызвана одной из следующих двух причин:

  1. ваш документ схемы не найден
  2. имя элемента неверно истолковано, потому что парсер не задан как пространство имен

Разметка xsi:schemaLocation=»http://www.medidata.ch/QO/XSD QO_MDInvoiceRequest_400.xsd» определяет, что схема для элементов в пространстве имен найдена из относительной (файл) QO_MDInvoiceRequest_400.xsd. Поэтому, если вы не укажете парсеру какой документ схемы, который он должен использовать, он будет искать файл с этим именем из той же папки, где находится входной документ.

По второй причине я не могу оказать хорошую помощь, так как я не знаком с moxy, но/и я полагаю, что moxy всегда обрабатывает XML файлы в качестве пространства имен.

Оцените статью
Добавить комментарий