community.general.xml – Управление фрагментами XML-файлов или строк
Примечание
Этот плагин входит в коллекцию community.general (версия 2.0.1).
Для его установки используйте: ansible-galaxy collection install community.general.
Для использования в книге задач укажите: community.general.xml.
Обзор
- Интерфейс типа CRUD для управления фрагментами XML-файлов.
Требования
Ниже перечислены требования к хосту, на котором будет выполняться этот модуль.
- lxml >= 2.3.0
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| add_children список / элементы=строка | Добавление дополнительных дочерних элементов к выбранному элементу для заданного xpath. Дочерние элементы должны быть заданы в списке, и каждый элемент может быть либо строкой (например, children=ansible для добавления пустого <ansible/> дочернего элемента), либо словарем, где ключ — имя элемента, а значение — значение элемента.Для этого параметра необходимо задать xpath. | |
| attribute сырой | Атрибут для выбора при использовании параметра value. Это строка, а не префикс @. | |
| backup логическое значение |
| Создает резервную копию файла, включая информацию о времени, чтобы вы могли вернуть исходный файл в случае неправильного его изменения. |
| content строка |
| Поиск заданного xpath и получение содержимого.Для этого параметра необходимо задать xpath. |
| count логическое значение |
| Поиск заданного xpath и получение количества совпадений.Для этого параметра необходимо задать xpath. |
| input_type строка |
| Тип входных данных для add_children и set_children. |
| insertafter логическое значение |
| Добавление дополнительных дочерних элементов после последнего выбранного элемента для заданного xpath. Дочерние элементы должны быть заданы в списке, и каждый элемент может быть либо строкой (например, children=ansible для добавления пустого <ansible/> дочернего элемента), либо словарем, где ключ — имя элемента, а значение — значение элемента.Для этого параметра необходимо задать xpath. |
| insertbefore логическое значение |
| Добавление дополнительных дочерних элементов перед первым выбранным элементом для заданного xpath. Дочерние элементы должны быть заданы в списке, и каждый элемент может быть либо строкой (например, children=ansible для добавления пустого <ansible/> дочернего элемента), либо словарем, где ключ — имя элемента, а значение — значение элемента.Для этого параметра необходимо задать xpath. |
| namespaces словарь | Отображение соответствия имен пространств имён для выражения XPath. Должно быть словарем, а не списком элементов. | |
| path путь | Путь к файлу, с которым нужно работать. Этот файл должен существовать. Этот параметр обязателен, если не указан xmlstring. псевдонимы: dest, file | |
| pretty_print логическое значение |
| Красивая печать XML-вывода. |
| print_match логическое значение |
| Поиск заданного xpath и вывод всех совпадений.Для этого параметра необходимо задать xpath. |
| set_children список / элементы=строка | Установка дочерних элементов выбранного элемента для заданного xpath. Удаляет все существующие дочерние элементы. Дочерние элементы должны быть заданы как в add_children. Для этого параметра необходимо задать xpath. | |
| state строка |
| Устанавливает или удаляет выбор XPath (узел(ы), атрибут(ы)). псевдонимы: ensure |
| strip_cdata_tags логическое значение |
| Удаляет теги CDATA, окружающие текстовые значения. Обратите внимание, что это может нарушить ваш XML-файл, если текстовые значения содержат символы, которые могут быть интерпретированы как XML. |
| value сырой | Желаемое состояние выбранного атрибута. Либо строка, либо для сброса значения ключевое слово Python None (YAML-эквивалент null).Элементы по умолчанию не имеют значения (но присутствуют). Атрибуты по умолчанию — пустая строка. | |
| xmlstring строка | Строка, содержащая XML, над которым нужно выполнить операцию. Этот параметр обязателен, если не указан path. | |
| xpath строка | Действительное выражение XPath, описывающее элемент(ы), которые нужно изменить. Обычно работает с корневым элементом документа /. |
Примечания
Примечание
- При тестировании выражений используйте параметры
--checkи--diff. - Вывод diff автоматически форматируется, поэтому он может не отражать фактическое содержимое файла, а только его структуру.
- Этот модуль не обрабатывает сложные выражения XPath, поэтому ограничивайте выражения XPath простыми выражениями.
- Если ваши XML-элементы используют пространства имён, вам необходимо использовать параметр
namespaces, см. примеры. - Префикс пространства имён должен использоваться для всех дочерних элементов элемента, где определено пространство имён, если для них не определено другое пространство имён.
См. также
См. также
- Раздел сообщества вики по разработке модуля xml
-
Дополнительная информация, связанная с разработкой этого модуля xml.
- Введение в XPath
-
Краткое руководство по XPath (w3schools.com).
- Справочник по XPath
-
Справочная документация по XSLT/XPath (developer.mozilla.org).
Примеры
# Consider the following XML file:
#
# <business type="bar">
# <name>Tasty Beverage Co.</name>
# <beers>
# <beer>Rochefort 10</beer>
# <beer>St. Bernardus Abbot 12</beer>
# <beer>Schlitz</beer>
# </beers>
# <rating subjective="true">10</rating>
# <website>
# <mobilefriendly/>
# <address>http://tastybeverageco.com</address>
# </website>
# </business>
- name: Remove the 'subjective' attribute of the 'rating' element
community.general.xml:
path: /foo/bar.xml
xpath: /business/rating/@subjective
state: absent
- name: Set the rating to '11'
community.general.xml:
path: /foo/bar.xml
xpath: /business/rating
value: 11
# Retrieve and display the number of nodes
- name: Get count of 'beers' nodes
community.general.xml:
path: /foo/bar.xml
xpath: /business/beers/beer
count: yes
register: hits
- ansible.builtin.debug:
var: hits.count
# Example where parent XML nodes are created automatically
- name: Add a 'phonenumber' element to the 'business' element
community.general.xml:
path: /foo/bar.xml
xpath: /business/phonenumber
value: 555-555-1234
- name: Add several more beers to the 'beers' element
community.general.xml:
path: /foo/bar.xml
xpath: /business/beers
add_children:
- beer: Old Rasputin
- beer: Old Motor Oil
- beer: Old Curmudgeon
- name: Add several more beers to the 'beers' element and add them before the 'Rochefort 10' element
community.general.xml:
path: /foo/bar.xml
xpath: '/business/beers/beer[text()="Rochefort 10"]'
insertbefore: yes
add_children:
- beer: Old Rasputin
- beer: Old Motor Oil
- beer: Old Curmudgeon
# NOTE: The 'state' defaults to 'present' and 'value' defaults to 'null' for elements
- name: Add a 'validxhtml' element to the 'website' element
community.general.xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml
- name: Add an empty 'validatedon' attribute to the 'validxhtml' element
community.general.xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml/@validatedon
- name: Add or modify an attribute, add element if needed
community.general.xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml
attribute: validatedon
value: 1976-08-05
# How to read an attribute value and access it in Ansible
- name: Read an element's attribute values
community.general.xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml
content: attribute
register: xmlresp
- name: Show an attribute value
ansible.builtin.debug:
var: xmlresp.matches[0].validxhtml.validatedon
- name: Remove all children from the 'website' element (option 1)
community.general.xml:
path: /foo/bar.xml
xpath: /business/website/*
state: absent
- name: Remove all children from the 'website' element (option 2)
community.general.xml:
path: /foo/bar.xml
xpath: /business/website
children: []
# In case of namespaces, like in below XML, they have to be explicitly stated.
#
# <foo xmlns="http://x.test" xmlns:attr="http://z.test">
# <bar>
# <baz xmlns="http://y.test" attr:my_namespaced_attribute="true" />
# </bar>
# </foo>
# NOTE: There is the prefix 'x' in front of the 'bar' element, too.
- name: Set namespaced '/x:foo/x:bar/y:baz/@z:my_namespaced_attribute' to 'false'
community.general.xml:
path: foo.xml
xpath: /x:foo/x:bar/y:baz
namespaces:
x: http://x.test
y: http://y.test
z: http://z.test
attribute: z:my_namespaced_attribute
value: 'false'
Возвращаемые значения
Общая информация о возвращаемых значениях документирована здесь, следующие поля уникальны для этого модуля:
| Ключ | Возвращаемое значение | Описание |
|---|---|---|
| actions словарь | успех | Словарь с исходным выражением XPath, пространствами имен и состоянием. Пример: {'namespaces': ['namespace1', 'namespace2'], 'state=present': None, 'xpath': 'xpath'} |
| backup_file строка | при backup=да | Имя созданного резервного файла. Пример: /path/to/file.xml.1942.2017-08-24@14:16:01~ |
| count целое число | при установленном параметре 'count' | Количество совпадений выражения XPath. Пример: 2 |
| matches список / элементы=строка | при установленном параметре 'print_match' | Найденные совпадения выражения XPath. |
| msg строка | всегда | Сообщение, связанное с выполненными действиями. |
| xmlstring строка | при установленном параметре 'xmlstring' | XML-строка результирующего вывода. |
Авторы
- Tim Bielawa (@tbielawa)
- Magnus Hedemark (@magnus919)
- Dag Wieers (@dagwieers)
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/community/general/xml_module.html