Как проверить кодировку файла xml

от admin

XML — проблемы с кодировкой

Попытка
Схема=Новый COMОбъект("MSXML2.XMLSchemaCache.6.0");
Исключение
Сообщить("Не удалось создать объект XMLSchemaCache (возможно, не установлен MSXML 6)");
Возврат;
КонецПопытки;

Попытка
Схема.add("",ИмяФайлаСхемы);
Исключение
Сообщить("Не удалось подключить схему: "+ИмяФайлаСхемы);
Схема=Неопределено;
Возврат;
КонецПопытки;

Попытка
ДОМ=Новый COMОбъект("MSXML2.DOMDocument.6.0");
Исключение
Сообщить("Не удалось создать объект DOMDocument (возможно, не установлен MSXML 6)");
Схема=Неопределено;
Возврат;
КонецПопытки;

ДОМ.schemas=Схема;
ДОМ.async=Ложь;
ДОМ.validateOnParse=Истина;
ДОМ.resolveExternals=Истина;
Если ВыводитьВсеОшибки Тогда
ДОМ.SetProperty("MultipleErrorMessages",Истина);
КонецЕсли;
ДОМ.load(ИмяФайла);

Если (ДОМ.parseError.errorCode<>0) Тогда
// ошибки при проверке правильности
Сообщить("При проверке по схеме выявлены ошибки!");
Если ВыводитьВсеОшибки Тогда
Для каждого parseError из ДОМ.parseError.AllErrors Цикл
Сообщить(parseError.reason);
Сообщить(parseError.srcText);
КонецЦикла;
Иначе
Сообщить(ДОМ.parseError);
КонецЕсли;
Иначе
Сообщить("Файл успешно прошёл проверку по схеме!");
РезПроверки=Истина;
КонецЕсли;

получаю ошибку на первом же атрибуте где встречается кириллица:
В текстовом комментарии обнаружен недопустимый знак.

Как проверить кодировку файла xml

Здесь могла бы быть ваша реклама

Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel

Помог: 3 раз(а)

Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.

Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо

После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..

Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.

Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.

На последок как оно происходит на форумах

Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.

Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12

XML. XML документы

Синтаксически в XML, по сравнению с HTML, нет ничего нового. Это такой же текст, размеченный тэгами, но с той лишь разницей, что в HTML существует ограниченный набор тэгов, которые можно использовать в документах, в то время, как XML позволяет создавать и использовать любую разметку, которая может понадобиться для разметки данных.

Несомненным достоинством XML является и то, что это достаточно простой язык. Основных конструкций в XML мало, но, несмотря на это, с их помощью можно создавать разметку документов практически любой сложности.

Для демонстрации структуры XML документа лучше обратиться к какому нибуть примеру. Рассмотрим следующий XML документ:

Рассмотрим данный пример подробно. Первая строка документа определяет его как XML документ, построенный в соответствии с первой версией языка (version=»1.0″). В этой же конструкции можно указать и кодировку, в которой создан документ:

xml version=»1.0″ encoding=»Windows-1251″ ?>.

Кодировкой по умолчанию для XML является unicode. Далее находится открывающий тэг корневого (главного) элемента <корневой_элемент>, содержащий элемент <элемент>, который, в свою очередь, содержит элемент <еще_элемент атрибут=»значение» /> с атрибутом атрибут. Как видно из примера, правила записи элементов, атрибутов и их значений в XML ничем не отличаются от правил записи элементов атрибутов и их значений в HTML (также есть открывающие и закрывающие тэги элементов, элементы с содержимым и без и т.д.), только набор элементов несколько расширен, благодаря чему мы и можем «нагрузить» разметку семантикой.

Ниже приводятся несколько правил построения XML документа. Итак:

  • любой XML документ должен начинаться строкой <?xml version=»1.0″ ?>
  • любой XML документ должен иметь единственный (не более, не менее!) корневой элемент; например, в HTML для этих целей использовался элемент <html>, в примере выше — это <корневой_элемент>.
  • кодировкой по умолчанию для символов XML документа является Unicode кодировка UTF-8, поэтому XML файлы должны быть сохранены в соответствующей кодировкой или в 1-й строке документа должна быть задана кодировка документа, например encoding=»Windows-1251″ (при работе только с латиницей это никак себя не проявляет, так как кодировка этих символов в ASCIIсовпадает с UTF-8).
  • правила записи большинства конструкций языка совпадает с правилами XHTML, изучавшемся вами ранее (более подробно речь об основных конструкциях языка пойдет далее в уроке).

XML документ представляет собой обыкновенный текстовый файл с расширением .xml. Единственная особенность их заключается в том, что для символов файла рекомендуется использовать кодировку Unicode.

Основные конструкции XML

Помимо элементов, атрибутов и текста, документы могут содержать и другие конструкции, такие как комментарии, инструкции по обработке и секции символьных данных. Эти базовые составляющие используются для того, чтобы чтобы гибко, но в четком соответствии со стандартами, размечать документы любой сложности. Рассмотрим эти конструкции поподробнее.

Элемент

Тэги в XML документе не просто размечают текст — они выделяют объект, называемый элементом. Элементы являются основными структурными единицами XML — именно они иерархически организуют информацию, содержащуюся в документе. Элементы могут быть пустыми, т.е. не содержать ни данных, ни других конструкций, или непустыми — включать в себя текст, другие элементы и т. п.

Пустой элемент имеет следующий вид:

<элемент атрибут=»значение» атрибут=»значение» . />

Примерами таких элементов в знакомом HTML являются: <br />, <img src=»images/picture.gif» /> и др.

Читать:
Как привести int к string c

Непустые элементы имеют вид:

<элемент атрибут=»значение» атрибут=»значение» . > . Содержимое элемента . </элемент>

В HTML таких элементов большинство: <body> . </body>, <p> . </p> — в этих элементах может располагаться как текст, так и другие элементы (таблицы, рисунки. ).

Необходимо помнить об обной очень важной особенности XML: имена в XML — регистро-зависимы, то есть <Sample-element />, <SAMPLE-ELEMENT /> и <sample-element /> — совершенно разные элементы.

Легко заметить, что документ, состоящий из вложенных друг в друга элементов, подобен дереву: родительский элемент является корнем, дочерние элементы — ветками, а если они не содержат ничего более — листьями:

Графически этот пример выглядит следующим образом:

В данном случае <library> является корнем, <book> и </publisher> — ветви, а <title>, <author>, <name> и <homepage> — листья

Внимание: в XML требуется тщательно следить за правильностью вложения элементов друг в друга — элементы, раньше открытые, должны быть позже закрыты. В противном случае не может быть и речи о иерархической структуре документа.

Атрибут

В элементах можно использовать с присвоенными им значениями. Атрибут задается следующим образом:

атрибут = «значение»

В отличие от HTML в XML атрибуты всегда должны иметь значение! Значение атрибута заключается в двойные или одинарные кавычки. При необходимости, можно использовать одинарные кавычки внутри двойных и наоборот.

<company name = ‘Акционерное Общество «Витязь»‘ . /> . <book author = «О’Генри» . />

Имена в XML регистро-зависимые. Это относится не только к элементам, но и к атрибутам.

Символьные данные: секция CDATA

Секция выделяет часть документа, внутри которых текст не должен восприниматься как разметка. CDATA означает буквально «character data» — символьные данные. Вот пример секции CDATA:

<![CDATA[ содержимое ]]>

Внутри секции CDATA могут располагаться любые символы, даже < и & — они не будут восприниматься анализатором как управляющие. Единственная последовательность, которая не должна присутствовать в CDATA, это «]]>» — окончание символьных данных.

Комментарии

XML документ может содержать комментарии, записываемые следующим образом:

<!— Это комментарий —> . <!— комментарии могут охватывать несколько строк —>

Текст комментария может состоять из любых символов, кроме двух «-» подряд («—«).

Задание на лабораторную работу

Создать XML документ, содержащий информацию о какой-либо предметной области. Название предметной области согласовать с преподавателем. Для оформления XML документа использовать знания и пользоваться правилами, указаными в теоретических сведениях. Проверить документ на действительность.

The Apache Software Foundation создала набор ПО, представляющего собой парсеры и другое обеспечение для работы с XML. Одним из таких известных парсеров является Xerces. Он существует в виде отдельного ПО, реализованного на С++ или Java. Чтобы не ограничивать Вас в выборе инструментальной среды и ОС, будем использовать Java реализацию ввиду ее кроссплатформенности и простоты использования.

Замечание. Для запуска Java приложения необходимо, чтобы на компьютере была установлена Java машина от Sun. Желательно с Java SDK.

Проверить действительность My.XML можно командой

java sax.counter my.xml

При необходимости нужно явно указать путь к архивам Xerces ключом -classpath

Как проверить кодировку файла xml

This article describes XML encoding and DOM interface methods.

Original product version: Extensible Markup Language
Original KB number: 275883

Summary

One major advantage of Extensible Markup Language (XML) data is that it is an independent platform. However, correct encoding must be specified to ensure proper transfer of XML data between different platforms. The white paper How to Encode XML Data addresses general XML encoding issues in detail: How to Encode XML Data.

Under most scenarios, XML encoding errors originate from the different default encoding settings of the XML parser (MSXML) methods and interfaces. A clear understanding of these default settings will help in preventing the encoding errors.

XML Encodings

MSXML supports all encodings that are supported by Internet Explorer. Internet Explorer’s support depends on which language packs are installed on the computer; this information is stored under the registry key: HKEY_CLASSES_ROOT\MIME\Database\Charset .

MSXML has native support for the following encodings:

The proper place to specify encoding for the data is the XML declaration. For example, if the data is encoded with ISO-8859-1 standard, you can specify this as follows:

Without this information, the default encoding is UTF-8 or UTF-16, depending on the presence of a UNICODE byte-order mark (BOM) at the beginning of the XML file. If the file starts with a UNICODE byte-order mark (0xFF 0xFE) or (0xFE 0xFF), the document is considered to be in UTF-16 encoding; otherwise, it is in UTF-8. The Save method of the IXMLDOMDocument interface maintains the original encoding of the document. The default for this method is UTF-8.

MSXML DOM Errors

Two common errors that are returned from the XML Document Object Model (DOM) interface methods are:

An Invalid character was found in text content.

Switch from current encoding to specified encoding not supported.

With the load method of the IXMLDOMDocument interface, these errors usually occur under the following conditions:

No encoding is specified, no byte-order mark is found at the beginning of the XML file, and the data contains special characters

The specified encoding does not match the actual encoding of the XML data. A good practice is to always specify the correct encoding inside the XML declaration, rather than accepting the default encoding.

With the MSXML parser versions 2.5, 2.5 SP1 and 2.6, the loadXML method of IXMLDOMDocument can only load UTF-16 or UCS-2 encoded data. Any attempt to load XML data that is encoded with another encoding format results in the following error:

Switch from current encoding to specified encoding not supported. With the release of MSXML 3.0 (Msxml3.dll), this restriction is removed, and the following code runs without error:

The xml property of the IXMLDOMDocument interface writes out the XML data as UTF-16 encoded but without the byte-order mark at the beginning. This may lead to encoding problems.

You may also receive these errors when you call the transformNode method of the IXMLDOMNode interface with an XSL or XSLT file in which the XML encoding information is specified as follows:

The transformNode method returns a BSTR that is UTF-16 encoded data by definition. A better way to retain the encoding is to call the transformNodeToObject method and store the results to a stream or to a new XML document and then save it.

Похожие статьи