xml - Управление фрагментами XML-файлов или строк
Новое в версии 2.4.
- Обзор
- Требования (для хоста, на котором выполняется модуль)
- Параметры
- Примеры
- Значения возврата
- Примечания
Обзор
- Интерфейс, похожий на CRUD, для управления фрагментами XML-файлов.
- Возможно, вас также заинтересуют краткие руководства с http://www.w3schools.com/xpath/ и https://developer.mozilla.org/en-US/docs/Web/XPath.
Требования (для хоста, на котором выполняется модуль)
- lxml >= 2.3.0
Параметры
| параметр | обязательный | по умолчанию | варианты | комментарии |
|---|---|---|---|---|
| add_children | нет | Добавление дополнительных дочерних элементов к выбранному элементу для заданного xpath.Дочерние элементы должны быть заданы в списке, и каждый элемент может быть либо строкой (например, children=ansible для добавления пустого <ansible/> дочернего элемента), либо словарем, где ключ — имя элемента, а значение — значение элемента.Этот параметр требует, чтобы xpath был задан. | ||
| attribute | нет | Атрибут для выбора при использовании параметра value.Это строка, а не префикс @. | ||
| backup | нет | нет |
| Создание резервной копии файла, включая информацию о времени, чтобы вы могли восстановить исходный файл, если неправильно его перезаписали. |
| content | нет |
| Поиск заданного xpath и получение содержимого.Этот параметр требует, чтобы xpath был задан. | |
| count | нет | нет |
| Поиск заданного xpath и получение количества совпадений.Этот параметр требует, чтобы xpath был задан. |
| input_type | нет | yaml |
| Тип входных данных для add_children и set_children. |
| namespaces | нет | Сопоставление пространства имен prefix:uri для выражения XPath.Должно быть dict, а не list элементов. | ||
| path | да | Путь к файлу для обработки. Файл должен существовать. Этот параметр обязателен, если не задан xmlstring.псевдонимы: dest, file | ||
| pretty_print | нет | нет |
| Форматированный вывод XML. |
| print_match | нет | нет |
| Поиск заданного xpath и вывод всех совпадений.Этот параметр требует, чтобы xpath был задан. |
| set_children | нет | Установить дочерние элементы выбранного элемента для заданного xpath.Удаляет все существующие дочерние элементы. Дочерние элементы должны быть указаны, как и в add_children.Этот параметр требует, чтобы xpath был задан. | ||
| state | нет | present |
| Установить или удалить выбор XPath (узел(ы), атрибут(ы)). псевдонимы: ensure |
| value | нет | Желаемое состояние выбранного атрибута. Либо строка, либо для сброса значения используется ключевое слово Python None (YAML-эквивалент null).Элементы по умолчанию без значения (но присутствующие). Атрибуты по умолчанию — пустая строка. | ||
| xmlstring | да | Строка, содержащая XML для обработки. Этот параметр обязателен, если не задан path. | ||
| xpath | нет | / | Действительное выражение XPath, описывающее элемент(ы), которые вы хотите изменить. Действует по корню документа, /, по умолчанию. |
Примеры
- 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 attrribute 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 | Словарь с исходным выражением XPath, пространствами имен и состоянием. | успех | dict | {'xpath': 'xpath', 'state=present': None, 'namespaces': ['namespace1', 'namespace2']} |
| backup_file | Имя резервной копии файла, которая была создана | при backup=да | str | /path/to/file.xml.1942.2017-08-24@14:16:01~ |
| count | Количество совпадений с XPath. | при заданном параметре 'count' | int | 2 |
| matches | Найденные совпадения с XPath. | при заданном параметре 'print_match' | list | |
| msg | Сообщение, связанное с выполненным действием(ями). | всегда | строка | |
| xmlstring | Строка XML результирующего вывода. | при заданном параметре 'xmlstring' | строка |
Примечания
Примечание
- Используйте параметры
--checkи--diff, когда тестируете свои выражения. - Вывод diff автоматически форматируется, поэтому может не отражать фактическое содержимое файла, а только структуру файла.
- Этот модуль не обрабатывает сложные выражения XPath, поэтому ограничьте выражения XPath простыми выражениями.
- Обратите внимание, что в случае, если ваши XML-элементы имеют пространства имен, вам необходимо использовать параметр
namespaces. - Префиксы пространств имен следует использовать для всех дочерних элементов элемента, где определено пространство имен, если для них не определено другое пространство имен.
- Дополнительную информацию об этом модуле можно найти в вики-документации сообщества по адресу https://github.com/ansible/community/wiki/Module:-xml
Статус
Этот модуль помечен как превью, что означает, что интерфейс не гарантированно будет обратной совместим.
Для получения помощи в разработке модулей, если вы заинтересованы, прочтите Информация о сообществе и участие, Тестирование Ansible и Разработка модулей.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.4/xml_module.html