xml

xml превращает XML в адресуемое дерево: элементы выбираются по точечному пути, атрибуты — через @name, а текст элемента — через #text.

ДанныеВерсия 1.1.6Стабильная
lil-terminal

Обзор

xml даёт XML-файлам такой же точный рабочий процесс: чтение путей элементов и атрибутов, поиск по ключам и значениям, атомарное изменение одного узла, проверка документа и нормализованный XML через dump.

Элементы, атрибуты и текст — разные узлы

config.@env и config.application.name указывают на разные типы XML-узлов. Команда даёт простым XML-файлам компактную модель путей, но не пытается заменить XPath или полноценный XML-редактор; требуется PHP DOM.

Синтаксис

lil-terminal
xml <file> [key|options] · xml dump <file>

Справочник

xml <file>

показать данные XML

xml <file> <key>

показать точный элемент, атрибут (@name) или #text по пути

xml dump <file>

показать нормализованный исходный текст XML

-f <text|mask> [-k|-v]

найти совпадения в ключах или значениях; * и ? включают маску

-w <key> : <value>

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

-w <key> < <file>

записать значение, прочитанное из другого файла

-d <key>

удалить значение по точечному пути

-c

проверить корректность файла XML

Как пользоваться

Начните с xml config/app.xml, чтобы увидеть пути. Добавьте точечный путь для одного значения. -f ищет по именам и значениям, -k ограничивает поиск именами, -v — значениями. -c проверяет XML, dump показывает заново собранный текст. В Base флаг -w <key> : <value> изменяет узел, < <file> берёт значение из файла, а -d <key> удаляет узел. Перед записью сделайте копию.

Ограничения и безопасность

Команда меняет структуру XML, а не бережно редактирует исходный текст. При записи могут исчезнуть комментарии, пространства имён, нюансы смешанного содержимого и исходное оформление или порядок одноимённых узлов. DTD и внешние сущности запрещены. Нужно расширение PHP DOM; в Minimum доступен только просмотр целого файла. Для точной правки разметки есть edit и code.

Интерактивный пример из `/sandbox/`

Запускайте подготовленные примеры прямо на странице. Результат заранее сформирован и показывается в браузере; команды терминала на сервере не выполняются.

Открыть файл и повторно использовать его через $

Установка и управление

Устанавливайте актуальную совместимую версию. Для полного набора возможностей выбирайте Base, для сокращённого — Minimum; уже установленный модуль обновляет команда upgrade.

Base и Minimum — два пакета одного текущего релиза модуля, а не разные версии команды.

Пакет Base

Установить полный пакет с локальной справкой и всеми опубликованными режимами.

install xml
Пакет Minimum

Установить сокращённый пакет без локальной справки; help <cmd> -i открывает актуальную серверную справку.

install xml -m
Точная публичная версия

Установить именно эту опубликованную версию.

install xml -v 1.1.6
Проверить или обновить

Поручить upgrade проверить совместимость и заменить установленный блок только при необходимости.

upgrade xml
Удалить модуль

Удалить блок расширения, не затрагивая ядро и остальные модули.

install xml -u

Примеры

Примеры можно копировать, но сайт их не выполняет. Перед запуском на реальном проекте проверьте пути, права и разрушающие флаги.

Открыть файл и повторно использовать его через $
xml config/app.xml
config.@env               production
config.application.name   lil-shop
config.application.debug  true
config.database.host      localhost
config.database.port      3306
Показать точный элемент, атрибут (@name) или #text по пути
xml config/app.xml config.application.name
lil-shop
Показать точный элемент, атрибут (@name) или #text по пути
xml config/app.xml config.@env
production
Показать точный элемент, атрибут (@name) или #text по пути
xml config/app.xml config.database.port
3306
Найти совпадения в ключах или значениях; * и ? включают маску
xml config/app.xml -f "config.database.*" -k
config.database.host  localhost
config.database.port  3306
Найти совпадения в ключах или значениях; * и ? включают маску
xml config/app.xml -f "localhost" -v
config.database.host  localhost
Найти совпадения в ключах или значениях; * и ? включают маску
xml config/app.xml -f "debug"
config.application.debug  true
Записать значение и нормализовать XML-файл
xml config/app.xml -w config.database.port : 3307
config.database.port  3307
Записать значение, прочитанное из другого файла
xml config/app.xml -w config.application.name < config/from-value.txt
config.application.name  new-shop
Удалить значение по точечному пути
xml config/app.xml -d config.application.debug
config.@env              production
config.application.name  lil-shop
config.database.host     localhost
config.database.port     3306
Проверить отсутствующий файл
xml config/app.xml -c
Valid XML
Показать нормализованный исходный текст XML
xml dump config/app.xml
<?xml version="1.0" encoding="UTF-8"?>
<config env="production">
  <application>
    <name>lil-shop</name>
    <debug>true</debug>
  </application>
  <database>
    <host>localhost</host>
    <port>3306</port>
  </database>
</config>
Показать точный элемент, атрибут (@name) или #text по пути
xml config/app.xml unknown.key
Path not found
Проверить корректность файла XML
xml config/invalid.xml -c
Invalid XML
Показать данные XML
xml config/missing.xml
File not found
Записать значение и нормализовать XML-файл
xml config/app.xml -w config.database.port
Value required after : or <
Удалить значение по точечному пути
xml config/app.xml -d config
XML data must have exactly one root element
Записать значение и нормализовать XML-файл
xml config/app.xml -w config.missing.child : 5
Parent path is not a collection

Файл из примера: sandbox/config/app.xml

Пример использует файл или каталог из защищённой учебной папки /sandbox/.

<?xml version="1.0" encoding="UTF-8"?>
<config env="production">
  <application><name>lil-shop</name><debug>true</debug></application>
  <database><host>localhost</host><port>3306</port></database>
</config>

Связанная документация

Текущая публичная версия

v1.1.62026-11-01

Производственная доработка

Актуальная стабильная версия xml. xml превращает XML в адресуемое дерево: элементы выбираются по точечному пути, атрибуты — через @name, а текст элемента — через #text.