Узнайте, как использовать xmlstarlet для эффективной обработки полезных данных XML в ваших скриптах.

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

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

Встроенный сценарий оболочки не предоставляет простой способ сделать это или поддерживает библиотеки для обработки этого, как мы можем в современных языках программирования, таких как Python, Java или Go. Итак, вероятно, вы заметили, что пишете код для анализа такого рода полезных данных. Но это не единственный способ сделать это, и мы можем (и должны!) Использовать существующие утилиты для выполнения этой работы за нас.

xmlstarlet

Я не мог найти лучшего способа объяснить, что делает xmlstarlet, что определяют владельцы в своем репозитории исходного кода:

XMLStarlet - это набор инструментов командной строки XML, который можно использовать для преобразования,
запроса, проверки и редактирования XML-документов и файлов с помощью простого набора команд оболочки
аналогично тому, как это делается для простых текстовых файлов с помощью grep. / sed / awk /
tr / diff / patch.

Итак, xmlstarlet предоставляет все возможности для выполнения всего, что вы можете себе представить, работая с XML аналогичным образом, поскольку это были простые текстовые файлы.



Установка

Процесс установки этой утилиты довольно прост и зависит от используемой вами операционной системы. Я предполагаю, что большинство сценариев оболочки предназначены для целевой машины Unix. Установить его довольно просто, так как в большинстве репозиториев пакетов есть версия этого инструмента.

Итак, если вы используете систему на основе apt, вам необходимо выполнить команду:

sudo apt-get install xmlstarlet 

Если вы используете другую платформу, не беспокойтесь, потому что у них есть доступные версии для всех наиболее часто используемых операционных систем и платформ, как вы можете увидеть по ссылке ниже:



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

Как только это программное обеспечение будет установлено, первое, что мы сделаем, это запустим его, чтобы увидеть доступные параметры.

XMLStarlet Toolkit: Command line utilities for XML
Usage: D:\Data\Downloads\xmlstarlet-1.6.1-win32\xmlstarlet-1.6.1\xmlstarlet.exe [<options>] <command> [<cmd-options>]
where <command> is one of:
  ed    (or edit)      - Edit/Update XML document(s)
  sel   (or select)    - Select data or query XML document(s) (XPATH, etc)
  tr    (or transform) - Transform XML document(s) using XSLT
  val   (or validate)  - Validate XML document(s) (well-formed/DTD/XSD/RelaxNG)
  fo    (or format)    - Format XML document(s)
  el    (or elements)  - Display element structure of XML document
  c14n  (or canonic)   - XML canonicalization
  ls    (or list)      - List directory as XML
  esc   (or escape)    - Escape special XML characters
  unesc (or unescape)  - Unescape special XML characters
  pyx   (or xmln)      - Convert XML into PYX format (based on ESIS - ISO 8879)
  p2x   (or depyx)     - Convert PYX into XML
<options> are:
  -q or --quiet        - no error output
  --doc-namespace      - extract namespace bindings from input doc (default)
  --no-doc-namespace   - don't extract namespace bindings from input doc
  --version            - show version
  --help               - show help
Wherever file name mentioned in command help it is assumed
that URL can be used instead as well.

Type: xmlstarlet <command> --help <ENTER> for command help

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

Пример использования 1: выбор значения.

Мы собираемся начать с самого простого варианта использования: попробуйте выбрать значение из XML (file.xml) следующим образом:

<root>
<object1 name="attribute_name">value in XML</object1>
</root>

Итак, начнем с самой простой команды:

./xmlstarlet  sel  -t -v "/root/object1"  ./file.xml

value in XML

Это обеспечивает значение внутри элемента object1, используя -t для определения нового шаблона и -v для определения предложения value-of. Если теперь мы хотим получить значение атрибута, мы можем сделать это очень похоже на предыдущую команду:

./xmlstarlet  sel  -t -v "/root/object1/@name"  ./file.xml

attribute_name

Вариант использования 2: Обновление значения.

Теперь мы воспользуемся другим подходом, основанным на том же файле. Мы обновим значение элемента object1, чтобы установить текст «обновленный текст».

Для этого выполняем следующую команду:

./xmlstarlet ed -u "/root/object1" -v "updated text" ./file.xml

<?xml version="1.0"?>
<root>
  <object1 name="attribute_name">updated text</object1>
</root>

Резюме

xmlstarlet предоставит нам все возможности для управления чем-то сложным, поскольку есть XML и выполняет все задачи, которые вы можете себе представить, просто без необходимости кодировать всю логику синтаксического анализа. Я надеюсь, что вы стали более счастливым разработчиком с тех пор, как вам нужно управлять XML внутри сценария оболочки.