📃 XML

Синтаксис, атрибуты, пространства имён, XPath, XSD и сравнение с JSON.

Шпаргалки · Данные · #xml #markup #data

Пример

<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="http://example.com/shop">
  <book id="1" lang="ru">
    <title>Война и мир</title>
    <price currency="RUB">500.00</price>
    <!-- комментарий -->
    <description><![CDATA[Текст с <символами> & без экранирования]]></description>
  </book>
</catalog>

Правила корректности

  • Один корневой элемент.
  • Каждый открывающий тег закрывается, теги вкладываются правильно.
  • Регистр важен: <Price> и <price> разные.
  • Значения атрибутов в кавычках.
  • Спецсимволы: &lt; &gt; &amp; &quot; &apos;.
  • Корректный (well-formed) XML соответствует синтаксису; валидный (valid) ещё и схеме.

XPath

Выражение Результат
/catalog/book книги от корня
//title все title в документе
//book[@id='1'] книга с атрибутом
//book[price>100] по условию
//book[1] первая книга (нумерация с 1)
//book/title/text() текст заголовка
//book/@id значение атрибута
count(//book) количество

Схема XSD (фрагмент)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="book">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="title" type="xs:string"/>
        <xs:element name="price" type="xs:decimal"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:int" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

Инструменты

xmllint --noout file.xml                        # проверка синтаксиса
xmllint --schema s.xsd file.xml --noout         # проверка по схеме
xmllint --xpath "//title/text()" file.xml

XML или JSON

XML: схемы, пространства имён, XSLT, смешанное содержимое (документы), SOAP, конфиги Java. JSON: компактнее, нативен для JavaScript и REST.