Как создать файл xml c

Обновлено: 21.11.2024

Синтаксический анализатор Oracle XML для C читает XML-документ и использует API-интерфейсы DOM или SAX для обеспечения программного доступа к его содержимому и структуре. Вы можете использовать синтаксический анализатор в проверяющем или непроверяющем режиме.

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

Объектная модель документа (DOM) . DOM — это древовидное представление структуры XML-документа в памяти.

Простой API для XML (SAX) . SAX — это стандарт анализа XML на основе событий.

Определение типа документа (DTD) . XML DTD определяет юридическую структуру XML-документа.

XML-схема . Как и DTD, XML-схема определяет юридическую структуру XML-документа.

Пространства имен XML . Пространства имен — это механизм различения имен элементов и атрибутов.

Если вам требуется общее введение в описанные выше технологии, обратитесь к XML-ресурсам, перечисленным в разделе "Связанные документы" предисловия.

Стандарты и спецификации

XML 1.0 является рекомендацией W3C. C XDK API обеспечивает полную поддержку XML 1.0 (второе издание). Спецификацию второго издания можно найти по следующему URL-адресу:

Спецификации DOM уровня 1, уровня 2 и уровня 3 являются рекомендациями W3C. C XDK API обеспечивает полную поддержку DOM уровня 1 и 2, но не поддерживает уровень 3. Ссылки на спецификации для всех трех уровней можно найти по следующему URL-адресу:

SAX доступен в версии 1.0, которая устарела, и версии 2.0. SAX не является спецификацией W3C. C XDK API обеспечивает полную поддержку как SAX 1.0, так и 2.0. Вы можете найти документацию для SAX по следующему URL-адресу:

Пространства имен XML являются рекомендацией W3C. Спецификацию можно найти по следующему URL-адресу:

Использование синтаксического анализатора XML для C

Синтаксический анализатор Oracle XML для C проверяет правильность формата XML-документа и, при необходимости, проверяет его соответствие DTD. Ваше приложение может получить доступ к проанализированным данным через API DOM или SAX.

Этот раздел содержит следующие темы:

Обзор Parser API для C

Основой API синтаксического анализа XML являются API XML, DOM и SAX. Табл. 15-1 описывает интерфейсы для этих API. Полную документацию по API см. в справочнике по Oracle XML API.

Таблица 15-1 Интерфейсы для API XML, DOM и SAX

Создание и удаление контекстов. XML-контекст верхнего уровня ( xmlctx ) совместно использует общую информацию между взаимодействующими XML-компонентами.

Создание и анализ XML-документов и DTD.

Attr определяет функции получения и установки для атрибутов XML.

CharacterData определяет функции для управления символьными данными.

Документ определяет функции для создания узлов XML, получения информации о документе XML и установки DTD для документа.

DocumentType определяет функции получения для DTD.

Элемент определяет функции получения и установки для элементов XML.

Entity определяет функции получения для сущностей XML.

NamedNodeMap определяет функции получения для именованных узлов.

Узел определяет функции получения и установки для узлов XML.

NodeList определяет функции, которые освобождают список узлов и получают узел из списка.

Обозначение определяет функции, которые получают системный и общедоступный идентификатор от узла.

ProcessingInstruction определяет функции получения и установки для инструкций по обработке.

Текст определяет функцию, которая разбивает текстовый узел на два.

Синтаксический анализатор XML для типов данных C

Полный список типов данных для C XDK см. в справочнике по Oracle XML API. В табл. 15-2 описаны типы данных, используемые в синтаксическом анализаторе XML для C.

Таблица 15-2. Типы данных, используемые в синтаксическом анализаторе XML для C

Синтаксический анализатор XML для C по умолчанию

Обратите внимание на следующие значения по умолчанию для синтаксического анализатора XML для C:

Кодировка набора символов — UTF-8. Если все ваши документы имеют кодировку ASCII, то установка кодировки US-ASCII повысит производительность.

Синтаксический анализатор печатает сообщения в stderr, если не указан обработчик ошибок.

Синтаксический анализатор проверяет входные документы на корректность, но не на достоверность. Вы можете установить свойство "validate" для проверки ввода.

Использование синтаксического анализатора XML для C: основной процесс

На рис. 15-1 показана последовательность вызова синтаксического анализатора XML для C.

Рис. 15-1 Анализатор XML для последовательности вызова C

Выполните следующие шаги в своем приложении:

Инициализируйте процесс синтаксического анализа с помощью функции XmlCreate(). Следующий фрагмент кода взят из DOMNamespace.c :

Проанализируйте входной элемент, который может быть XML-документом или строковым буфером

Если вы выполняете синтаксический анализ с DOM, вызовите функцию XmlLoadDom(). Следующий фрагмент кода взят из DOMNamespace.c :

Если вы анализируете с помощью SAX, вызовите функцию XmlLoadSax(). Следующий пример фрагмента кода взят из SAXNamespace.c:

Если вы используете интерфейс DOM, включите следующие шаги:

Используйте функцию XmlLoadDom() для вызова XmlDomGetDocElem() .На этом шаге вызываются другие функции DOM, которые обычно представляют собой функции узла или печати, выводящие документ DOM по мере необходимости. Следующий фрагмент кода взят из DOMNamespace.c :

Вызовите функцию XmlFreeDocument(), чтобы очистить все структуры данных, созданные в процессе синтаксического анализа. Следующий фрагмент кода взят из DOMNamespace.c :

Если вы используете интерфейс SAX, выполните следующие действия:

Обработка результатов вызова XmlLoadSax() с помощью функций обратного вызова.

Зарегистрируйте функции обратного вызова. Обратите внимание, что вы можете установить для любой функции обратного вызова SAX значение NULL, если она не нужна.

Используйте XmlFreeDocument() для очистки памяти и структур, используемых во время синтаксического анализа. Программа не освобождает память, выделенную для параметров, переданных в обратные вызовы SAX, или для узлов и данных, хранящихся в дереве синтаксического анализа DOM, пока вы не вызовете XMLFreeDocument() или XMLDestroy() . Следующий фрагмент кода взят из DOMNamespace.c :

Либо вернитесь к шагу 2, либо перейдите к следующему шагу.

Завершите процесс синтаксического анализа с помощью XmlDestroy() . Следующий фрагмент кода взят из DOMNamespace.c :

Если потоки разветвляются где-то в последовательности вызовов между инициализацией и завершением, приложение ведет себя непредсказуемо и приводит к непредсказуемым результатам.

Вы можете использовать функции обратного вызова памяти XML_ALLOC_F и XML_FREE_F для собственного выделения памяти. Если да, укажите обе функции.

Запуск анализатора XML для демонстрационных программ C

Каталоги $ORACLE_HOME/xdk/demo/c/ (UNIX) и %ORACLE_HOME%\xdk\demo\c (Windows) содержат несколько XML-приложений, иллюстрирующих использование синтаксического анализатора XML для C с интерфейсами DOM и SAX. . Табл. 15-3 описывает демонстрационные версии.

Таблица 15-3 Демонстрации синтаксического анализатора C

Следующие демонстрационные программы используют DOM API:

Программа DOMNamespace использует расширения Namespace для DOM API. Он выводит все элементы и атрибуты NSExample.xml вместе с полной информацией о пространстве имен.

Программа DOMSample использует DOM API для отображения контура Клеопатры, то есть XML-элементов ACT и SCENE . Документ cleo.xml содержит XML-версию шекспировской трагедии об Антонии и Клеопатре .

Программа FullDom демонстрирует пример использования полного интерфейса DOM. Он осуществляет все вызовы. В качестве входных данных программа принимает файл FullDom.xml , который показывает использование сущностей.

Программа Traverse иллюстрирует использование итераторов DOM, обходчиков дерева и диапазонов. Программа принимает в качестве входных данных документ class.xml, в котором описывается курс исчисления в колледже.

Программа XPointer иллюстрирует использование языка указателей XML путем поиска дочерних элементов элемента в pantry.xml .

Следующие демонстрационные программы используют SAX API:

Программа SAXNamespace использует расширения пространства имен для SAX API. Он выводит все элементы и атрибуты NSExample.xml вместе с полной информацией о пространстве имен.

Программа SAXSample использует SAX API для отображения всех строк пьесы "Клеопатра", содержащих заданное слово. Если не указывать слово, то используется слово «смерть». Документ cleo.xml содержит XML-версию шекспировской трагедии об Антонии и Клеопатре .

Документацию, описывающую, как компилировать и запускать примеры программ, можно найти в файле README в том же каталоге. Основные шаги следующие:

Перейдите в каталог $ORACLE_HOME/xdk/demo/c (UNIX) или %ORACLE_HOME%\xdk\demo\c (Windows).

Запустите make (UNIX) или Make.bat (Windows) в системной подсказке. Утилита make переходит в каждый демонстрационный подкаталог и запускает make, чтобы сделать следующее:

Компилирует исходные файлы C с помощью утилиты cc. Например, Makefile в каталоге $ORACLE_HOME/xdk/demo/c/dom включает следующую строку:

Запускает каждую демонстрационную программу и перенаправляет вывод в файл. Например, Makefile в каталоге $ORACLE_HOME/xdk/demo/c/dom включает следующую строку:

Сравните файлы *.std с файлами *.out для каждой программы. Файл *.std содержит ожидаемый результат для каждой программы. Например, DOMSample.std содержит ожидаемые выходные данные запуска DOMSample .

Использование утилиты командной строки C XML Parser

Утилита xml, расположенная в каталоге $ORACLE_HOME/bin (UNIX) или %ORACLE_HOME%\bin (Windows), представляет собой интерфейс командной строки для анализа XML-документов. Он проверяет как корректность, так и достоверность.

Используйте следующий синтаксис в командной строке для вызова xml (версия для Windows — xml.exe ):

Таблица 15-4 описывает параметры командной строки.

Таблица 15-4 Параметры командной строки анализатора C

< tr >
Опция Описание
- B BaseURI Задает базовый URI для процессора XSLT.Базовый URI http://pqr/xsl.txt преобразует pqr.txt в http://pqr/pqr.txt .
- c Проверяет корректность, но не выполняет проверку.
- e encoding Указывает кодировку входного файла по умолчанию ("incoding").
-E encoding Указывает кодировку DOM/SAX ("outcoding").
-f файл Интерпретирует файл как спецификацию файла, а не URI.
-G xptr_exprs Вычисляет примеры схемы XPointer, приведенные в файле.
-h Показывает справку по использованию и основной список параметров командной строки.
-hh Показывает полный список параметров командной строки.
-in Указывает количество итераций обработки XSLT.
-l language Указывает язык сообщений об ошибках.
-n Обходит DOM и сообщает количество элементов, как показано в следующем образце выходных данных:< /td>
-o XSLoutfile Указывает выходной файл процессора XSLT.< /td>
-p Выводит структуру документа/DTD после синтаксического анализа. Например, корневой элемент hello печатается как:
-P Печатает документ из корневого элемента. Например, корневой элемент hello печатается как:
-PP Печатает из корневого узла (DOC) и включает декларацию XML.
-PE-кодирование Указывает кодировку для вывода -P или -PP.
-PX Включает объявление XML в вывод.
-s таблица стилей Указывает таблицу стилей XSLT.
-v Отображает версию синтаксического анализатора XDK и затем завершает работу.
-V var value Тестирует переменные верхнего уровня в CXSLT.
-w Сохраняет все пробелы.
-W Прекращает синтаксический анализ после предупреждения.
-x Использует интерфейс SAX и печатает документ, как показано в следующем образце вывода:

Использование утилиты командной строки XML Parser: пример

Вы можете протестировать xml на различных XML-файлах, расположенных в $ORACLE_HOME/xdk/demo/c . В примере 15-1 показано содержимое NSExample.xml .

Пример 15-1 NSExample.xml

Вы можете проанализировать этот файл, подсчитать количество элементов и отобразить дерево DOM, как показано в следующем примере:

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

И полученный XML:

Как видите, это немного более объектно-ориентированный подход, чем подход XmlWriter, и требует немного больше кода. Что мы делаем, так это создаем экземпляр объекта XmlDocument, который мы будем использовать для создания как новых элементов, так и атрибутов, используя методы CreateElement() и CreateAttribute(). Каждый раз, когда мы это делаем, мы добавляем элементы либо непосредственно в документ, либо в другой элемент. Вы можете увидеть это в примере, где корневой элемент («пользователи») добавляется непосредственно к документу, а пользовательские элементы добавляются к корневому элементу. Атрибуты, конечно, добавляются к элементам, которым они принадлежат, с помощью метода Append() свойства Attributes. Весь XML-документ записывается на диск в последней строке, где мы используем метод Save().

Теперь, как уже упоминалось, для этого требуется немного больше кода, чем при использовании XmlWriter, но представьте ситуацию, когда вам просто нужно войти в существующий XML-документ и изменить несколько значений.При использовании подхода XmlWriter вам придется сначала прочитать всю информацию с помощью XmlReader, сохранить ее, изменить, а затем записать всю информацию обратно с помощью XmlWriter. Поскольку XmlDocument хранит для вас все в памяти, обновление существующего XML-файла становится намного проще. В следующем примере открывается файл «test-doc.xml», который мы создали в предыдущей главе, и увеличивается возраст каждого пользователя на единицу. Посмотрите, как это просто:

Мы загружаем файл XML и запрашиваем все узлы. Затем мы перебираем их, считываем атрибут age в целочисленную переменную, а затем записываем значение обратно в узел и атрибут, увеличив значение на 1. Наконец, мы сохраняем документ обратно в тот же файл, и если вы откройте его, вы увидите, что у всех наших пользователей только что был день рождения. Довольно круто!

Вашего предпочтительного языка нет в списке? Нажмите здесь, чтобы помочь нам перевести эту статью на ваш язык!

С распространением информации в Интернете возникла потребность в стандартизации семантики контента. Читатели, которые хотели, чтобы контент доставлялся в определенных форматах, и те, кто хотел, чтобы конфигурации подпадали под стандартные определения данных, выиграли от использования данных описания, встроенных в контент. XML представляет такие данные описания, заимствуя синтаксис разметки HTML для переноса данных в «метаданные». Используя любой язык программирования, даже C, программист может напечатать отформатированную XML-разметку в файл для обработки любой другой программой.

Формат файла XML

Формат файла XML в основном основан на понятии "метаданные". Метаданные — это, как следует из названия, данные о данных. XML предоставляет формат тегов, который позволяет поставщикам содержимого «оборачивать» данные в идентификационные теги, описывающие эти данные. Типичные примеры включают выделение имени автора из содержания статьи с помощью тегов «» и «». Программы чтения XML анализируют эти теги и соответствующим образом форматируют данные. Программы чтения RSS, например, используют определенную схему тегов XML для нормализации структурирования контента для простой и универсальной доставки через стандартные программы чтения RSS.

Запись файла на C

Чтобы создать правильно отформатированный файл XML на языке C, важно понять, как написать этот файл. Файлы XML по сути являются текстовыми файлами, поэтому программист может использовать стандартные параметры ввода/вывода файлов, встроенные в язык программирования C. Как показано в следующем коде, функция "fopen" позволяет программисту создать новый XML-файл и назначить файл ссылочному указателю для обработки:

ФАЙЛ *xml_file; fopen("/home/test.xml", "w");

Форматирование тегов

Теперь, когда файл открыт, программист может записать в него теги. Во-первых, он должен был вставить строковый заголовок, чтобы идентифицировать формат файла как XML для интерпретаторов. Затем в файл вставляются основные идентификационные теги вместе со всем содержимым, описываемым этими тегами:

ФАЙЛ *xml_file; fopen("/home/test.xml", "w");

заголовок символа[50] = "\n\n"; char content[150] = "Эта статья написана Бобом"; char автор[5] = "Боб";

Чтение XML-файла

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

Г.С. Джексон специализируется на темах, связанных с литературой, компьютерами и технологиями. Он имеет степень бакалавра гуманитарных наук в области английского языка и информатики Университета Южного Иллинойса в Эдвардсвилле.

XML был разработан таким образом, чтобы его мог читать как человек, так и машина.

Пример XML 1

Пример XML 2

Заголовок

Зачем изучать XML?

XML играет важную роль во многих различных ИТ-системах.

XML часто используется для распространения данных через Интернет.

Важно (для всех типов разработчиков программного обеспечения!) хорошо разбираться в XML.

Чему вы научитесь

Это руководство даст вам четкое представление о:

  • Что такое XML?
  • Как работает XML?
  • Как я могу использовать XML?
  • Для чего можно использовать XML?

Важные стандарты XML

В этом руководстве также подробно рассматриваются следующие важные стандарты XML:

Мы рекомендуем читать это руководство в последовательности, указанной в меню слева.

Учитесь на примерах

Примеры лучше тысячи слов. Примеры часто легче понять, чем текстовые пояснения.

Это руководство дополняет все объяснения поясняющими примерами "Попробуйте сами".

Викторина XML

Проверьте свои навыки работы с XML в W3Schools!

Начните свою карьеру

Получите сертификат, пройдя курс

Мы только что запустили
видео W3Schools

ПИКЕР ЦВЕТА

Получите сертификат
пройдя курс
сегодня!

КОД ИГРА

Сообщить об ошибке

Если вы хотите сообщить об ошибке или сделать предложение, не стесняйтесь отправить нам электронное письмо:

Спасибо за помощь!

Ваше сообщение было отправлено в W3Schools.

Лучшие учебные пособия
Лучшие ссылки
Лучшие примеры
Веб-курсы

W3Schools оптимизирована для обучения и повышения квалификации. Примеры могут быть упрощены для улучшения чтения и обучения. Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания. Используя W3Schools, вы соглашаетесь прочитать и принять наши условия использования, политику конфиденциальности и файлы cookie.

Расширяемый язык разметки, широко известный как XML, представляет собой язык, разработанный специально для того, чтобы его было легко интерпретировать как людьми, так и компьютерами. Язык определяет набор правил, используемых для кодирования документа в определенном формате. В этой статье описаны методы чтения и записи XML-файлов в Python.

Примечание. Обычно процесс чтения данных из XML-файла и анализа его логических компонентов называется синтаксическим анализом. Поэтому, когда мы говорим о чтении XML-файла, мы имеем в виду анализ XML-документа.

  • BeautifulSoup используется вместе с парсером xml lxml
  • Библиотека Elementtree.

Использование BeautifulSoup вместе с парсером lxml

Для чтения и записи XML-файла мы будем использовать библиотеку Python с именем BeautifulSoup. Чтобы установить библиотеку, введите в терминал следующую команду.

Beautiful Soup поддерживает синтаксический анализатор HTML, включенный в стандартную библиотеку Python, но также поддерживает ряд сторонних синтаксических анализаторов Python. Одним из них является синтаксический анализатор lxml (используемый для анализа документов XML/HTML). lxml можно установить, выполнив следующую команду в командном процессоре вашей операционной системы:

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

Чтение данных из файла XML

Пример:

Используемый файл XML:

Питон3

ВЫВОД:

Запись XML-файла

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

Пример:

Питон3

Вывод:

Использование Elementree

Модуль Elementree предоставляет нам множество инструментов для работы с XML-файлами. Самое приятное в этом то, что он включен в стандартную встроенную библиотеку Python. Поэтому для этой цели не нужно устанавливать никаких внешних модулей. Поскольку формат xml по своей сути является иерархическим форматом данных, его намного проще представить в виде дерева. Модуль предоставляет ElementTree методы для представления всего XML-документа в виде единого дерева.

В следующих примерах мы рассмотрим дискретные методы чтения и записи данных в XML-файлы и из них.

Чтение XML-файлов

Чтобы прочитать файл XML с помощью ElementTree, во-первых, мы импортируем класс ElementTree, найденный в библиотеке xml, под именем ET (общее соглашение). Затем передал имя файла XML-файла методу ElementTree.parse(), чтобы включить анализ нашего XML-файла. Затем получили корень (родительский тег) нашего xml-файла с помощью getroot(). Затем отображается (распечатывается) корневой тег нашего xml-файла (неявным способом). Затем отобразил атрибуты вложенного тега нашего родительского тега, используя root[0].attrib. root[0] для первого тега родительского корня и attrib для получения его атрибутов. Затем мы отобразили текст, заключенный в 1-м вложенном теге 5-го вложенного тега корня тега.

Пример:

Питон3

Вывод:

Запись XML-файлов

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

Чтобы сделать то же самое, во-первых, мы создаем корневой (родительский) тег под именем chess с помощью команды ET.Element(‘chess’). Все теги будут находиться под этим тегом, т. е. после определения корневого тега под ним могут быть созданы другие подэлементы. Затем мы создали вложенный тег/подэлемент с именем Opening внутри тега chess с помощью команды ET.SubElement(). Затем мы создали еще два подтега под тегом Opening с именами E4 и D4. Затем мы добавили атрибуты в теги E4 и D4 с помощью метода set(), который находится внутри SubElement() и используется для определения атрибутов тега. Затем мы добавили текст между тегами E4 и D4, используя текст атрибута, найденный внутри функции SubElement. В конце мы преобразовали тип данных содержимого, которое мы создавали, из 'xml.etree.ElementTree.Element' в объект байтов, используя команду ET.tostring() (даже несмотря на то, что имя функции tostring() в некоторых реализациях, которые она преобразует тип данных на `bytes`, а не на `str`). Наконец, мы сбрасываем данные в файл с именем gameofsquares.xml, который открывается в режиме `wb`, что позволяет записывать в него двоичные данные. В итоге мы сохранили данные в наш файл.

Читайте также: