Как создать файл XML в Блокноте, VS Code, Excel и на Python

Создать XML можно в любом текстовом редакторе: декларация, один корневой тег и сохранение с расширением .xml в UTF-8.

Показываем это в Блокноте и VS Code, выгрузку таблицы из Excel и сборку файла на Python, а потом проверяем результат в браузере и разбираем шесть частых ошибок.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3017 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3671 экспертное мнение Подписаться на Телеграм-канал
Обложка: Как создать файл XML в Блокноте, VS Code, Excel и на Python

Чтобы создать файл XML, откройте любой текстовый редактор, впишите первой строкой декларацию <?xml version="1.0" encoding="UTF-8"?>, а под ней один корневой тег, внутри которого лежат все данные. Сохраните файл с расширением .xml в кодировке UTF-8 и откройте его в браузере: если вместо дерева тегов появилась ошибка, браузер покажет строку, где она сидит.

Ниже пошагово разберём Блокнот и VS Code, выгрузку таблицы из Excel и сборку файла на Python, а в конце соберём ошибки, на которых новички теряют больше всего времени. Что такое сам формат и чем он отличается от HTML, мы подробно разобрали в статье «Что такое XML простыми словами».

Как создать XML-файл в Блокноте за пять шагов

Рой собирает на экране ноутбука аккуратное дерево вложенных тегов

Специальная программа не нужна: XML состоит из обычного текста с тегами. Подойдёт Блокнот в Windows и TextEdit на Mac.

  1. Откройте Блокнот и вставьте текст файла (пример ниже).
  2. В меню «Файл» выберите «Сохранить как».
  3. В списке типа файла выберите «Все файлы», иначе Блокнот допишет к имени .txt.
  4. Наберите имя с расширением, например products.xml.
  5. Проверьте, что в списке кодировок стоит UTF-8, и нажмите «Сохранить».

Вот минимальный рабочий пример: каталог из двух товаров. У каждого товара есть атрибут sku с артикулом, вложенные теги с названием и ценой.

<?xml version="1.0" encoding="UTF-8"?>
<products>
  <product sku="A-101">
    <name>Блокнот в клетку</name>
    <price currency="RUB">250</price>
  </product>
  <product sku="A-102">
    <name>Ручка гелевая</name>
    <price currency="RUB">90</price>
  </product>
</products>

С кодировкой в Блокноте обычно ничего делать не надо. Microsoft ещё в 2018 году сделала UTF-8 без метки BOM вариантом по умолчанию для новых файлов и вывела кодировку в строку состояния. Как ещё сохранять файлы с нужным расширением, рассказали в инструкции по Блокноту Windows.

TextEdit на Mac умеет хранить форматированный текст, а XML нужен простой. Перед сохранением выберите «Формат» → «Конвертировать в простой текст», потом сохраняйте с расширением .xml.

Как создать XML в VS Code с подсветкой тегов

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

Скриншоты ниже сделаны в vscode.dev, браузерной версии VS Code. Она открывается без установки, а меню и строка состояния там те же, что в программе на компьютере.

  1. Нажмите «Создать файл…» на стартовой вкладке и выберите текстовый файл.
  2. Щёлкните по надписи «Простой текст» справа в строке состояния, наберите XML и выберите язык из списка.
  3. Вставьте или наберите текст, затем сохраните файл с расширением .xml.
Выбор языка XML для нового файла в VS Code (vscode.dev)
Щёлкнули по «Простой текст» в строке состояния и набрали XML. Тот же список открывается в VS Code на компьютере

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

XML-файл с каталогом товаров в VS Code: подсветка тегов и кодировка UTF-8
Теги, атрибуты и значения подсвечены разными цветами. Справа в строке состояния язык XML и кодировка UTF-8

Для больших файлов пригодится бесплатное расширение XML от Red Hat: оно подсказывает теги, форматирует документ и проверяет его по схеме. Если VS Code у вас ещё не стоит, начните с инструкции, как создать и запустить файл в VS Code.

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Из чего состоит правильный XML-файл

Деревянные блоки, вложенные друг в друга как теги XML-документа

Браузеры прощают HTML кривую разметку. XML не прощает ничего: одна незакрытая скобка, и файл не прочитается целиком. Правила задаёт спецификация XML 1.0 от W3C, вот те, на которых чаще всего ошибаются.

Правило Правильно Ошибка
Ровно один корневой элемент <products>…</products> вокруг всех товаров два тега <product> на верхнем уровне
Каждый тег закрыт <name>…</name> или <br/> <name>Блокнот без пары
Регистр имён совпадает <products>…</products> <Products>…</products>
Значения атрибутов в кавычках sku="A-101" sku=A-101
Спецсимволы заменены &amp; вместо &, &lt; вместо < голый & в тексте
Декларация в самом начале <?xml …?> на первой строке пустая строка или пробел перед ней

Сама декларация <?xml?> по спецификации не обязательна: там сказано, что документ «следует» с неё начинать. Но ставить её стоит, потому что в ней записана кодировка. Без неё программа считает текст UTF-8, и файл в другой кодировке прочитается кракозябрами.

Имена тегов вы придумываете сами. Договорённость одна: теги описывают смысл данных, а не внешний вид. Поэтому <price> лучше, чем <b>.

CheckroiCheckroiПодборка курсов по XML30 курсов • 10 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Как проверить XML-файл на ошибки

Быстрее всего перетащить файл в окно Chrome, Яндекс Браузера или Firefox. Правильный файл браузер покажет деревом: теги можно сворачивать треугольниками слева.

Правильный XML-файл в Chrome: дерево тегов каталога товаров
Файл без ошибок Chrome раскрывает деревом. Треугольники слева сворачивают вложенные теги

Если в файле ошибка, вместо дерева появится сообщение с номером строки и столбца. Ниже мы оставили в названии товара голый амперсанд: «Блокнот & ручка».

Ошибка разбора XML в Chrome: строка 4, столбец 20
Голый амперсанд в названии товара. Chrome называет строку 4 и столбец 20, по ним ошибку легко найти в редакторе

Кадры сделаны в Chrome с английским интерфейсом, поэтому подписи на них по-английски. На втором кадре смотрите на координаты: строка 4, столбец 20. Чтобы исправить ошибку, достаточно заменить & на &amp;.

Когда файлов много, удобнее проверять их скриптом. В Python для этого есть встроенный модуль xml.etree.ElementTree, ничего ставить не нужно:

import xml.etree.ElementTree as ET

for path in ["products.xml", "broken.xml"]:
    try:
        ET.parse(path)
        print(path, "— ошибок нет")
    except ET.ParseError as err:
        print(path, "—", err)

Вывод на наших двух файлах:

products.xml — ошибок нет
broken.xml — not well-formed (invalid token): line 4, column 19

Столбец здесь на единицу меньше, чем у браузера, потому что Python считает столбцы с нуля, а браузер с единицы. На macOS и в Linux есть ещё утилита xmllint: команда xmllint --noout broken.xml печатает строку с ошибкой и ставит под неё стрелку.

Проверка по схеме XSD

Браузер и ET.parse() проверяют только синтаксис. Им всё равно, что в теге цены написано «девяносто» вместо числа. Чтобы ловить и такие ошибки, к файлу пишут схему XSD: отдельный XML-файл, где перечислены разрешённые теги, их порядок и типы значений. Для нашего каталога в схеме сказано, что в <price> лежит десятичное число, а атрибут sku обязателен.

Проверка по схеме в xmllint запускается одной командой:

xmllint --noout --schema products.xsd products.xml

На правильном файле утилита отвечает products.xml validates. Мы заменили цену второго товара словом, и проверка ответила так:

bad-price.xml:9: element price: Schemas validity error : Element 'price': 'девяносто' is not a valid value of the atomic type 'xs:decimal'.
bad-price.xml fails to validate

Схемы XSD нужны там, где файл читает чужая программа: банк, маркетплейс, налоговая. Обычно схему даёт сам получатель, писать её с нуля приходится редко. Читать схемы и разбирать чужие выгрузки учат на курсах веб-разработки.

Как сохранить таблицу Excel в XML

Excel умеет выгружать данные в XML, но только через карту XML. Это описание того, какой столбец таблицы в какой тег попадает. Без карты пункт «Данные XML» в окне сохранения выдаст ошибку, что в книге нет сопоставленных диапазонов. Порядок по справке Microsoft:

  1. Включите на ленте вкладку «Разработчик», если её нет.
  2. На вкладке «Разработчик» откройте область задач «Источник XML», выберите «Сопоставления XML» и нажмите «Добавить».
  3. Укажите файл схемы .xsd или образец .xml. Из образца Excel попробует вывести схему сам, так что пример из этой статьи тоже подойдёт.
  4. Перетащите элементы из области «Источник XML» на столбцы таблицы.
  5. Нажмите на вкладке «Разработчик» кнопку экспорта, в окне «Экспорт XML» введите имя файла и нажмите «Экспорт».

У экспорта есть потолок: в XML-файл Excel сохраняет до 65 536 строк. Таблицу длиннее придётся резать на части или выгружать скриптом. Кадров здесь нет: в Google Таблицах, нашем обычном браузерном аналоге Excel, выгрузки в XML нет вовсе.

Если карта кажется громоздкой, есть путь проще. Сохраните таблицу в CSV, а XML соберите из неё на Python. Как читать CSV в коде, мы показали в статье про формат CSV.

Как создать XML-файл на Python

Когда данные лежат в списке, базе или CSV, файл выгоднее не набирать, а собрать кодом. Хватит базового Python и встроенного модуля. Тот же каталог из двух товаров:

import xml.etree.ElementTree as ET

items = [("A-101", "Блокнот в клетку", 250), ("A-102", "Ручка гелевая", 90)]

root = ET.Element("products")
for sku, name, price in items:
    product = ET.SubElement(root, "product", sku=sku)
    ET.SubElement(product, "name").text = name
    ET.SubElement(product, "price", currency="RUB").text = str(price)

tree = ET.ElementTree(root)
ET.indent(tree, space="  ")
tree.write("products_py.xml", encoding="utf-8", xml_declaration=True)

Скрипт запишет рядом с собой файл products_py.xml. Его содержимое:

<?xml version='1.0' encoding='utf-8'?>
<products>
  <product sku="A-101">
    <name>Блокнот в клетку</name>
    <price currency="RUB">250</price>
  </product>
  <product sku="A-102">
    <name>Ручка гелевая</name>
    <price currency="RUB">90</price>
  </product>
</products>

Три детали, которых обычно нет в коротких примерах:

  • Кодировку передавайте явно. По умолчанию write() пишет в ASCII, и вместо «Блокнот» в файле окажется &#1041;&#1083;…. Программа такой файл прочитает, а человеку его читать неудобно.
  • Отступы даёт ET.indent(). Функция появилась в Python 3.9, без неё весь файл уйдёт в одну строку.
  • Кавычки в декларации одинарные. Для XML это нормально, обе формы верны.

Если Python у вас ещё не установлен, начните с инструкции по установке Python на Windows, macOS и Linux, а первые программы разберите по статье с примерами кода для начинающих.

CheckroiCheckroiПодборка курсов по Python466 курсов • 48 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→ Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

XML для налоговой и ЭДО: почему его не пишут руками

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

  • Отчётность формирует учётная программа или бесплатная программа ФНС «Налогоплательщик ЮЛ»: она готовит документы для подачи в налоговые органы в электронном виде.
  • Счета-фактуры и УПД для контрагентов выгружает система электронного документооборота, через которую вы их отправляете.

Открыть такой файл в Блокноте и посмотреть, что внутри, можно. Править вручную не стоит: одна опечатка в атрибуте, и документ вернётся с отказом.

Частые ошибки и как их исправить

Рой с лупой радуется найденной и исправленной ошибке в коде

Все сообщения в таблице мы получили сами, когда проверяли испорченные копии примера через xmllint и Python.

Что пишет проверка Причина Что сделать
XML declaration allowed only at the start of the document перед <?xml?> стоит пустая строка или пробел удалить всё, что выше декларации
Extra content at the end of the document / junk after document element на верхнем уровне больше одного тега обернуть всё в один корневой тег
Opening and ending tag mismatch / mismatched tag тег не закрыт или закрыт в другом регистре сверить пары тегов, <Products> и <products> считаются разными тегами
Input is not proper UTF-8 / not well-formed (invalid token) файл сохранён в Windows-1251, а в декларации написано UTF-8 пересохранить файл в UTF-8
xmlParseEntityRef: no name голый символ & в тексте заменить на &amp;
AttValue: " or ' expected значение атрибута без кавычек взять значение в кавычки

Ещё одна ловушка без всякого сообщения: файл называется products.xml.txt, а Проводник прячет второе расширение. Включите показ расширений в Проводнике и переименуйте файл.

Если XML нужен для обмена с сервисом, спросите, нет ли у него JSON: этот формат короче и проще в коде. Чем они различаются, мы разобрали в статье «Что такое JSON».

Где освоить XML и работу с данными

Один файл собрать несложно. Дальше начинаются схемы XSD, разбор чужих выгрузок, обмен с API и автоматизация на Python. Всё это входит в курсы, где разбирают XML, и в программы по веб-разработке. Их можно сравнить по цене, длительности и формату в нашем каталоге:

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Профессия «Fullstack-разработчик на PHP»
Перейти на сайт курса
SkillboxSkillbox166 715 ₽5378 ₽/мес.12 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология145 100 ₽7125 ₽/мес.21 месяцОбзор курса
Профессия «Веб-разработчик с нуля»
Перейти на сайт курса
НетологияНетология127 300 ₽7125 ₽/мес.13 месяцевОбзор курса
Профессия «Fullstack-разработчик»
Перейти на сайт курса
SkillboxSkillbox149 738 ₽4404 ₽/мес.10 месяцевОбзор курса
Веб-разработчик
Перейти на сайт курса
Академия СинергияАкадемия Синергия141 036 ₽5877 ₽/мес.6 месяцевОбзор курса

Больше программ — в полном каталоге курсов по веб-разработке

Часто задаваемые вопросы

Как создать файл XML на компьютере

Откройте Блокнот или другой текстовый редактор, впишите первой строкой <?xml version="1.0" encoding="UTF-8"?> и один корневой тег со всеми данными внутри. Сохраните файл через «Сохранить как», выбрав тип «Все файлы», с расширением .xml и в кодировке UTF-8.

Чем открыть и проверить XML-файл

Перетащите файл в окно Chrome, Яндекс Браузера или Firefox. Правильный файл браузер покажет деревом тегов, а в файле с ошибкой назовёт номер строки и столбца, где она находится.

Как сохранить таблицу Excel в формате XML

Сначала добавьте в книгу карту XML на вкладке «Разработчик», в области «Источник XML», и сопоставьте элементы со столбцами. Потом экспортируйте данные через окно «Экспорт XML». Без карты Excel файл в XML не сохранит, а за один экспорт выгружает до 65 536 строк.

Чем XML отличается от HTML

HTML описывает, как показать страницу, и набор его тегов задан заранее. В XML теги вы придумываете сами под свои данные, а правила строже: каждый тег закрыт, корневой элемент один. Подробнее — в статье «Что такое XML простыми словами».

Почему XML-файл открывается с непонятными символами

Файл сохранён в одной кодировке, а прочитан в другой. Чаще всего текст записан в Windows-1251, а в декларации указано UTF-8. Пересохраните файл в UTF-8 через «Сохранить как».

Нужно ли писать XML для налоговой вручную

Нет. Формат каждого документа задаёт ФНС, поэтому декларации формирует учётная программа или бесплатная программа ФНС «Налогоплательщик ЮЛ», а счета-фактуры и УПД выгружает система электронного документооборота.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!