xml — Управление фрагментами XML-файлов или строк
Новое в версии 2.4.
Обзор
- Интерфейс типа CRUD для управления фрагментами XML-файлов.
- Вам также может быть интересен краткий учебник на https://www.w3schools.com/xml/xpath_intro.asp и https://developer.mozilla.org/en-US/docs/Web/XPath.
Требования
Ниже перечислены требования, необходимые на хосте, на котором выполняется этот модуль.
- lxml >= 2.3.0
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| add_children | Добавление дополнительных дочерних элементов к выбранному элементу для заданного xpath. Дочерние элементы должны быть заданы в списке, и каждый элемент может быть либо строкой (например, children=ansible для добавления пустого <ansible/> дочернего элемента), либо словарем, где ключ — имя элемента, а значение — значение элемента.Этот параметр требует, чтобы параметр xpath был задан. | |
| attribute | Атрибут для выбора при использовании параметра value. Это строка, не префикс @. | |
| backup bool |
| Создание резервной копии файла, включая информацию о времени, чтобы вы могли получить исходный файл, если вы каким-то образом неправильно его перезаписали. |
| content |
| Поиск заданного xpath и получение содержимого.Этот параметр требует, чтобы параметр xpath был задан. |
| count bool |
| Поиск заданного xpath и предоставление количества совпадений.Этот параметр требует, чтобы параметр xpath был задан. |
| input_type |
| Тип входных данных для add_children и set_children. |
| namespaces | Карта сопоставления prefix:uri пространства имен для выражения XPath.Нужно в виде dict, а не list элементов. | |
| path обязательно | Путь к файлу, над которым нужно работать. Файл должен существовать. Этот параметр обязателен, если не указан xmlstring. псевдонимы: dest, file | |
| pretty_print bool |
| Красивый вывод XML. |
| print_match bool |
| Поиск заданного xpath и вывод всех совпадений.Этот параметр требует, чтобы параметр xpath был задан. |
| set_children | Установка дочерних элементов(ов) выбранного элемента для заданного xpath. Удаляет все существующие дочерние элементы. Дочерние элементы должны быть указаны так же, как и в add_children. Этот параметр требует, чтобы параметр xpath был задан. | |
| state |
| Установить или удалить выбор xpath (узел(ы), атрибут(ы)). псевдонимы: ensure |
| value | Желаемое состояние выбранного атрибута. Либо строка, либо для удаления значения — ключевое слово Python None (YAML-аналог, null).Элементы по умолчанию не имеют значения (но присутствуют). Атрибуты по умолчанию — пустая строка. | |
| xmlstring обязательно | Строка, содержащая XML, над которым нужно работать. Этот параметр обязателен, если не указан path. | |
| xpath | Действительное выражение XPath, описывающее элемент(ы), которые вы хотите изменить. По умолчанию действует на корневой элемент документа, /. |
Примечания
Примечание
- Используйте опции
--checkи--diffпри тестировании выражений. - Вывод diff автоматически отформатирован, поэтому он может не отражать фактическое содержимое файла, а только его структуру.
- Этот модуль не обрабатывает сложные выражения XPath, поэтому ограничивайте выражения XPath простыми.
- Обратите внимание, что если ваши XML-элементы имеют пространства имен, вам нужно использовать параметр
namespaces. - Префиксы пространств имён должны использоваться для всех дочерних элементов элемента, где определено пространство имён, если для них не определено другое пространство имён.
- Дополнительную информацию об этом модуле можно получить в сообществе wiki по адресу https://github.com/ansible/community/wiki/Module:-xml
Примеры
- name: Remove the subjective attribute of the rating element
xml:
path: /foo/bar.xml
xpath: /business/rating/@subjective
state: absent
- name: Set the rating to 11
xml:
path: /foo/bar.xml
xpath: /business/rating
value: 11
# Retrieve and display the number of nodes
- name: Get count of beers nodes
xml:
path: /foo/bar.xml
xpath: /business/beers/beer
count: yes
register: hits
- debug:
var: hits.count
- name: Add a phonenumber element to the business element
xml:
path: /foo/bar.xml
xpath: /business/phonenumber
value: 555-555-1234
- name: Add several more beers to the beers element
xml:
path: /foo/bar.xml
xpath: /business/beers
add_children:
- beer: Old Rasputin
- beer: Old Motor Oil
- beer: Old Curmudgeon
- name: Add a validxhtml element to the website element
xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml
- name: Add an empty validatedon attribute to the validxhtml element
xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml/@validatedon
- name: Add or modify an attribute, add element if needed
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 attribute value
xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml
content: attribute
attribute: validatedon
register: xmlresp
- name: Show attribute value
debug:
var: xmlresp.matches[0].validxhtml.validatedon
- name: Remove all children from the website element (option 1)
xml:
path: /foo/bar.xml
xpath: /business/website/*
state: absent
- name: Remove all children from the website element (option 2)
xml:
path: /foo/bar.xml
xpath: /business/website
children: []
# In case of namespaces, like in below XML, they have to be explicitely stated
# NOTE: there's the prefix "x" in front of the "bar", too
#<?xml version='1.0' encoding='UTF-8'?>
#<foo xmlns="http://x.test" xmlns:attr="http://z.test">
# <bar>
# <baz xmlns="http://y.test" attr:my_namespaced_attribute="true" />
# </bar>
#</foo>
- name: Set namespaced '/x:foo/x:bar/y:baz/@z:my_namespaced_attribute' to 'false'
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 dict | успех | Словарь с исходным выражением xpath, пространствами имён и состоянием. Пример: {'xpath': 'xpath', 'namespaces': ['namespace1', 'namespace2'], 'state=present': None} |
| backup_file str | при backup=yes | Имя созданного резервного файла Пример: /path/to/file.xml.1942.2017-08-24@14:16:01~ |
| count int | при заданном параметре 'count' | Количество совпадений выражения xpath. Пример: 2 |
| matches list | при заданном параметре 'print_match' | Найденные совпадения xpath. |
| msg строка | всегда | Сообщения, связанные с выполненными действиями. |
| xmlstring строка | при заданном параметре 'xmlstring' | XML-строка с результатом. |
Статус
Этот модуль помечен как предварительный просмотр, что означает, что он не гарантирует обратную совместимость.
Обслуживание
Этот модуль помечен как сообщество, что означает, что его поддерживает сообщество Ansible. Подробнее см. Обслуживание и поддержка модулей.
Список других модулей, также поддерживаемых сообществом Ansible, см. здесь.
Автор
- Tim Bielawa (@tbielawa)
- Magnus Hedemark (@magnus919)
- Dag Wieers (@dagwieers)
Подсказка
Если вы заметите какие-либо проблемы в этой документации, вы можете отредактировать этот документ, чтобы улучшить его.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.6/modules/xml_module.html