Файл параметров программы не является корректным документом xml
Исходная версия продукта: Visual Basic
Исходный номер базы знаний: 315533
Заключение
XML-документы содержат элементы и атрибуты и предоставляют гибкий и эффективный способ обмена данными между приложениями и организациями. Чтобы указать допустимую структуру и содержимое XML-документа, можно написать определение типа документа (DTD), схему Microsoft XML-Data Reduced (XDR) или схему языка определения схемы XML (XSD).
Требования
В этой статье предполагается, что вы знакомы со следующими разделами:
Создание XML-документа
Запустите Microsoft Visual Studio 2005 или Microsoft Visual Studio .NET. Затем создайте XML-файл (в меню "Файл" наведите указатель мыши на пункт "Создать" и щелкните "Файл").
Выберите тип XML-файла и нажмите кнопку " Открыть".
Добавьте следующие данные в XML-документ для представления продукта в каталоге:
Сохраните файл Product.xml в папке, к которую вы сможете получить доступ позже (в примерах кода в этой статье предполагается папка с именем C:\MyFolder ).
Создание DTD и ссылка на XML-документ
В Visual Studio 2005 или Visual Studio .NET наведите указатель на пункт "Создать" в меню "Файл" и выберите пункт "Файл".
Выберите тип текстового файла и нажмите кнопку " Открыть".
Добавьте следующие объявления DTD в файл, чтобы описать грамматику XML-документа:
Сохраните файл с файлом Product.dtd в той же папке, что и XML-документ.
Повторно Product.xml в Visual Studio 2005 или Visual Studio .NET; для этого наведите указатель на пункт "Открыть" в меню "Файл" и выберите пункт "Файл". Добавьте инструкцию DOCTYPE (под строкой ?xml version="1.0" ), как показано ниже. При этом XML-документ связывается с DTD-файлом.
Сохраните измененный XML-документ как ProductWithDTD.xml.
Выполнение проверки с помощью DTD
В Module1 (перед началом основной подпрограммы) объявите логическую переменную с именем isValid следующим образом:
В подпрограмме Main создайте объект XmlTextReader для чтения XML-документа из текстового файла. Затем создайте объект для XmlValidatingReader проверки XML-данных:
Объект XmlValidatingReader имеет свойство ValidationType, указывающее требуемый тип проверки (DTD, XDR или схема). Задайте для этого свойства значение DTD следующим образом:
При возникновении ошибок проверки проверяющее средство чтения создает событие проверки. Добавьте следующий код, чтобы зарегистрировать обработчик событий проверки (вы реализуете подпрограмму MyValidationEventHandler на шаге 8 этого раздела):
Добавьте следующий код для чтения и проверки XML-документа. При возникновении ошибок проверки для ее обработки будет вызван MyValidationEventHandler. Для этой подпрограммы будет задано isValid значение False (см. шаг 8 этого раздела). Состояние isValid можно проверить после проверки, чтобы узнать, является ли документ допустимым или недопустимым.
После подпрограммы Main напишите подпрограмму MyValidationEventHandler следующим образом:
Выполните сборку и запустите приложение.
Элемент события проверки "Product" содержит неполное содержимое. Ожидался "ProductName". Ошибка произошла в file:///C:/MyFolder/ProductWithDTD.xml(4, 3). Недопустимый документ
Создание схемы XDR и ссылки на XML-документ
В Visual Studio 2005 или Visual Studio .NET наведите указатель на пункт "Создать" в меню "Файл" и выберите пункт "Файл".
Выберите тип текстового файла и нажмите кнопку " Открыть".
Добавьте следующие определения схемы XDR в файл, чтобы описать грамматику XML-документа:
Сохраните файл как Product.xdr в той же папке, что и XML-документ.
Повторно откройте исходныйProduct.xml и свяжите его со схемой XDR следующим образом:
Сохраните измененный XML-документ как ProductWithXDR.xml.
Выполнение проверки с помощью схемы XDR
Измените приложение таким образом, чтобы XmlTextReader загружал ProductWithXDR.xmlследующим образом:
Задайте ValidationType значение XDR, чтобы проверяющее средство чтения выполняло проверку XDR следующим образом:
Выполните сборку и запустите приложение.
Приложение должно сообщить о допустимсти XML-документа.
ИзменитеProductWithXDR.xml, чтобы сделать его намеренно недопустимым.
Запустите приложение еще раз.
Приложение должно сообщить об ошибке проверки.
Создание схемы XSD и ссылки на XML-документ
В Visual Studio .NET наведите указатель мыши на пункт "Создать" в меню "Файл" и выберите пункт "Файл".
Выберите тип текстового файла и нажмите кнопку " Открыть".
Добавьте в файл следующее определение схемы XSD, чтобы описать грамматику XML-документа:
Сохраните файл как Product.xsd в той же папке, что и XML-документ.
Повторно откройте исходныйProduct.xml и свяжите его со схемой XSD следующим образом:
Сохраните измененный XML-документ как ProductWithXSD.xml.
Выполнение проверки с помощью схемы XSD
Измените приложение таким образом, чтобы XmlTextReader ProductWithXSD.xml, как показано ниже.
Задайте ValidationType схему, чтобы проверяющее средство чтения выполняло проверку схемы XSD следующим образом:
Создайте и запустите приложение для проверки XML-документа с помощью схемы XSD.
Приложение должно сообщить о допустимсти XML-документа.
Использование пространств имен в схеме XSD
Откройте файл Product.xsd, откройте вкладку XML и измените начальный тег xsd:schema следующим образом, чтобы схема применяла к пространству имен urn:MyNamespace :
Сохраните файл Product.xsd.
Запустите приложение, чтобы проверить XML-документ с помощью схемы XSD.
Пространства имен кэша
Объект XmlSchemaCollection позволяет кэшировать схемы в памяти для повышения производительности. Каждая схема связана с другим пространством имен. Добавьте следующий код в кэш Product.xsd:
После кода, который создает объект XmlValidatingReader , добавьте следующую инструкцию. При этом кэш схемы добавляется в кэш XmlValidatingReader схемы, чтобы средство чтения можно было использовать схемы в памяти.
XML документ с корректным синтаксисом называется "правильно сформированным" или "синтаксически верным".
"Валидный" XML документ кроме всего прочего должен соответствовать определенному типу документов.
Синтаксически верные XML документы
XML документ с корректным синтаксисом является "синтаксически верным".
Синтаксические правила были описаны в предыдущих главах:
- XML документ должен иметь корневой элемент
- XML элемент должен иметь закрывающий тег
- XML теги регистрозависимы
- XML элементы должны соблюдать последовательность вложенности
- Значения XML атрибутов должны заключаться в кавычки
Валидные XML документы
Валидный XML документ не то же самое, что и синтаксически верный XML документ.
Первое правило для валидного XML документа то, что он должен быть синтаксически верным.
Второе правило — валидный XML документ должен соответствовать определенному типу документов.
Правила, определяющие допустимые элементы и атрибуты для XML документа, часто называются определениями документа или схемами документа.
Когда используют определения документа?
Определения документа — это самый простой способ предоставить рекомендации по допустимым элементам и атрибутам документа.
Определения документа также предоставляют общие рекомендации, которые могут использоваться другими пользователями и/или разработчиками.
Определения документа предоставляют стандартизацию, которая значительно облегчает жизнь.
Когда не используют определения документа?
В действительности XML не требует определений документа.
Когда вы экспериментируете с XML или работаете с небольшими XML файлами, создание определений документа может стать лишней тратой времени.
Если вы разрабатываете приложения, то подождите до тех пор, пока спецификации не будут стабильными, и только потом добавляйте определения документов. В обратном случае ваше приложение может перестать работать из-за ошибок проверки правильности документа.
Определения документа
С XML можно использовать различные типы определений документа:
- Оригинальное определение типа документа (DTD)
- Более новый тип определений, основанный на XML, - XML схема.
Проверка валидности XML документа
Для проверки валидности XML документов в сети Интернет существует множество программ и сайтов проверки XML документов.
XML ошибки остановят вас
Ошибки в XML документе остановят работу вашего XML приложения.
W3C спецификации XML предписывают, что при возникновении ошибки программа разбора XML документа должна прекратить свою работу. Это сделано для того, чтобы приложения XML были небольшого размера, быстрые и широко совместимые.
HTML браузеры отобразят HTML документ даже с ошибками (например, пропущенный закрывающий тег).
Если в вашей организации за отправку отчетов со сведениями о трудовой деятельности работников отвечаете вы, то возможно вы столкнулись с ошибкой «Переданный документ не является корректным Xml документом» при отправке отчетов в формате xml, выгруженных из вашей 1с и загруженных в личный кабинет ПФР для отправки.
ПОИСК РЕШЕНИЙ
Мы также столкнулись с данной проблемой, после первоначальной диагностики ситуации, проверки файла xml в программе CheckXml от ПФР, который выдал результат, что с файлом все в порядке, что было не совсем верно. Ничего не помогало, решили покопаться в интернете, очень долго искали решение, к сожалению нигде не было конкретного и внятного ответа.
Ошибка при отправке xml в ПФР
ЭВРИКА! РЕШЕНИЕ
Покопавшись долго, перепробовав все трюки, мы наткнулись на то, что наша 1с Камин, откуда выгружается отчет в формате .xml, почему то сохраняет файл с кодировкой UTF-8 BOM а нужно чтобы было UTF-8. Открыл файл .xml в текстовом редакторе NotePad++ и сконвертировал его с UTF-8 BOM на UTF-8. Это делается так: открываем файл в редакторе NotePad++, выделаем весь текст в файле, нажимая сочетания клавиш CTRL+A, либо выделив всю область мышкой. Далее, нажимаем правой кнопкой мыши по вкладке «Кодировка» и выбираем «Конвертировать в UTF-8», сохраняем файл.
После конвертирования в UTF-8, мы загрузили заново файл в личный кабинет ПФР и это помогло решить проблему, отчеты отправились и принялись без ошибок.
Правила синтаксиса XML крайне просты и логичны. Их легко запомнить и легко использовать.
Все XML элементы должны иметь закрывающий тег
В HTML некоторые элементы могут не иметь закрывающего тега:
В XML нельзя опускать закрывающий тег. Абсолютно все элементы должны закрываться:
Возможно, вы заметили из предыдущих примеров, что XML декларация не имеет закрывающего тега. Это не ошибка. Дело в том, что декларация не относится к XML документу, поэтому у нее и нет закрывающего тега.
Теги XML регистрозависимы
Теги XML являются регистрозависимыми. Так, тег не то же самое, что тег .
Открывающий и закрывающий теги должны определяться в одном регистре:
Замечание: "Открывающий и закрывающий теги" иногда еще называют "начальный и конечный теги". Используйте то определение, которое вам более симпатично. По сути это одно и то же.
XML элементы должны соблюдать корректную вложенность
В HTML иногда можно наблюдать такую картину:
и иногда это даже работает должным образом.
В XML все элементы обязаны соблюдать корректную вложенность:
Понятие "корректная вложенность" по отношению к приведенным примерам просто означает, что так как элемент открывается внутри элемента , то и закрываться он должен внутри элемента .
У XML документа должен быть корневой элемент
XML документ должен содержать один элемент, который будет родительским для всех других элементов. Он называется корневым элементом.
XML пролог
Следующая строка называется XML прологом:
XML пролог необязателен. Но если он есть, то это должна быть первая строка XML документа.
В XML документе могут присутствовать международные символы, вроде русских букв, и чтобы не возникало ошибок необходимо указать кодировку, либо сохранить XML файл в формате UTF-8.
UTF-8 — кодировка XML документов по умолчанию.
Значения XML атрибутов должны заключаться в кавычки
Так же, как и в HTML, у XML элементов могут быть атрибуты в виде пары имя/значение.
В XML значения атрибутов должны заключаться в кавычки.
Посмотрите на следующие два примера XML документа. Первый с ошибкой, второй написан правильно:
Ошибка в первом XML документе заключается в том, что значение атрибута date элемента note не заключено в кавычки.
Сущности
Некоторые символы в XML имеют особые значения.
Так, к ошибке приведет следующая строка XML документа:
Чтобы такая ошибка не возникала, нужно заменить символ "
В XML существует 5 предопределенных сущностей:
Сущность | Символ | Значение |
---|---|---|
< | меньше, чем | |
> | > | больше, чем |
& | & | амперсанд |
' | ' | апостроф |
" | " | кавычки |
Замечание: Только символы "" допустим, но лучше его всегда заменять на сущность.
Комментарии в XML
Синтаксис комментариев в XML такой же, как и в HTML.
Использование двух символов тире в середине комментария не допустимо.
Странно, но так можно:
В XML пробелы сохраняются
В HTML несколько последовательных пробельных символов усекаются до одного. В XML документе все пробельные символы сохраняются.
В XML новая строка сохраняется как LF
В приложениях Windows новая строка хранится в следующем виде: символ перевода каретки и символ новой строки (CR+LF).
Unix и Mac OSX используют LF.
Старые Mac системы используют CR.
XML сохраняет новую строку как LF.
Синтаксически верный XML документ
Если XML документ составлен в соответствии с приведенными синтаксическими правилами, то говорят, что это "синтаксически верный" XML документ.
Правильно Сформированные XML Документы
“Правильно Сформированный” XML документ имеет корректный XML синтаксис.
Синтаксические правила были описаны в статье про создание xml:
Валидные (Проверенные) XML Документы
“Валидный” XML документ – это “Правильно Сформированный” XML документ, который также подчиняется правилам Определения Типа Документа (от англ. – Document Type Definition или DTD):
Не забудь мне позвонить завтра! |
Объявление DOCTYPE в примере выше является ссылкой на внешний файл DTD. Содержимое этого файла показано в параграфе ниже.
XML DTD
Назначение DTD – определить структуру XML документа. Оно определяет структуру со списком допустимых элементов:
Если вы хотите более подробно ознакомиться с DTD, вы найдете соответствующую статью на сайте.
XML Схема
W3C поддерживает основанную на XML альтернативу DTD, называемую XML Схемой:
Вы можете подробнее ознакомиться с XML Схемой на сайте в статье, посвященной данной теме.
XML Валидатор
Чтобы проверить синтаксис ваших XML файлов, можете воспользоваться XML валидатором (смотрите ниже).
XML Ошибки
Ошибки в XML документах остановят выполнение ваших XML приложений.
W3C спецификация XML провозглашает, что программа должна прекратить обработку XML документа, если она найдет ошибку. Причина в том, что XML-ориентированное программное обеспечение должно быть небольшим, быстрым и совместимым.
HTML браузеры будут отображать документы с ошибками (наподобие пропусков конечных тегов). HTML браузеры являются большими (тяжеловесными) и несовместимыми, поскольку они имеют значительную часть ненужного кода для обращения с (и отображения) HTML ошибок.
В XML ошибки не разрешены.
Синтаксическая Проверка Вашего XML
Чтобы проверить XML синтаксис, воспользуйтесь XML валидатором.
Вставьте ваш XML код в текстовую область ниже, и проверьте синтаксис, кликнув кнопку “Проверить”.
Замечание: Валидатор проверяет только то, что ваш XML является “Правильно сформированным”. Если вы хотите осуществить проверку XML файл на соответствие DTD, смотрите последний параграф статьи.
Синтаксическая Проверка XML Файла
Вы можете сделать синтаксическую проверку XML файла, напечатав URL файла в поле ввода ниже, и затем кликнув кнопку “Проверить”:
Замечание: Если вы получаете ошибку “Доступ запрещен”, значит настройки безопасности вашего браузера не позволяют доступ к файлам через домены.
Проверка Вашего XML На Соответствие DTD
Если вы знаете DTD, и у вас запущен Internet Explorer, вы можете проверить ваш XML в текстовой области ниже.
Просто добавьте объявление DOCTYPE к вашему XML и кликните кнопку “Проверить”:
Читайте также: