Модуль community.general.xml — управление фрагментами XML-файлов или строк
Примечание
Этот модуль входит в коллекцию community.general (версия 12.6.1).
Возможно, эта коллекция уже установлена, если вы используете пакет ansible. Она не входит в ansible-core. Чтобы проверить, установлена ли она, выполните ansible-galaxy collection list.
Чтобы установить её, используйте: ansible-galaxy collection install community.general. Для использования этого модуля могут потребоваться дополнительные компоненты; подробности см. в разделе Требования.
Чтобы использовать его в плейбуке, укажите: community.general.xml.
Краткое описание
- Интерфейс в стиле CRUD для управления фрагментами XML-файлов.
Требования
Перечисленные ниже компоненты должны быть установлены на узле, где выполняется этот модуль.
- lxml >= 2.3.0
Параметры
Параметр | Комментарии |
|---|---|
add_children list / elements=any | Добавить дополнительные дочерние элементы к выбранному элементу для заданного Дочерние элементы необходимо указать в виде списка; каждый элемент может быть строкой (например, Чтобы использовать этот параметр, необходимо задать |
attribute any | Атрибут, который нужно выбрать при использовании параметра Это строка без префикса |
backup boolean | Создать резервную копию файла с отметкой времени, чтобы при случайном повреждении можно было восстановить исходный файл. Варианты:
|
content string | |
count boolean | |
input_type string | |
insertafter boolean | Добавить дополнительные дочерние элементы после последнего выбранного элемента для заданного Дочерние элементы необходимо указать в виде списка; каждый элемент может быть строкой (например, Чтобы использовать этот параметр, необходимо задать Варианты:
|
insertbefore boolean | Добавить дополнительные дочерние элементы перед первым выбранным элементом для заданного Дочерние элементы необходимо указать в виде списка; каждый элемент может быть строкой (например, Чтобы использовать этот параметр, необходимо задать Варианты:
|
namespaces dictionary | Сопоставление префиксов пространств имён Значением должен быть По умолчанию: |
path псевдонимы: dest, file path | Путь к файлу, с которым нужно работать. Этот файл должен существовать заранее. Этот параметр обязателен, если не указано |
pretty_print boolean | Форматировать XML-вывод для удобного чтения. Варианты:
|
print_match boolean | |
set_children list / elements=any | Задать дочерние элементы выбранного элемента для указанного Все существующие дочерние элементы удаляются. Дочерние элементы необходимо указать в том же формате, что и для Чтобы использовать этот параметр, необходимо задать |
state псевдонимы: ensure string | Задать или удалить выбранные узлы XPath (узел/узлы, атрибут/атрибуты). Варианты:
|
strip_cdata_tags boolean | Удалить теги CDATA, окружающие текстовые значения. Обратите внимание: это может повредить XML-файл, если текстовые значения содержат символы, которые могут интерпретироваться как XML. Варианты:
|
value any | Требуемое состояние выбранного атрибута. Строка или, чтобы сбросить значение, ключевое слово Python По умолчанию элементы не имеют значения (но присутствуют). По умолчанию атрибуты имеют пустую строку в качестве значения. |
xmlstring string | Строка, содержащая XML, с которым нужно работать. Этот параметр обязателен, если не указано |
xpath string | Допустимое выражение XPath, описывающее элементы, которыми нужно управлять. По умолчанию выполняется поиск в корне документа, |
Атрибуты
Атрибут | Поддержка | Описание |
|---|---|---|
check_mode | Поддержка: полная | Может работать в режиме |
diff_mode | Поддержка: полная | В режиме сравнения возвращает сведения об изменениях (или о возможных изменениях в |
Примечания
Примечание
- При проверке выражений используйте параметры
--checkи--diff. - Вывод различий автоматически форматируется для удобного чтения, поэтому он может не отражать фактическое содержимое файла, а показывать только его структуру.
- Этот модуль не обрабатывает сложные выражения 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" # must quote to ensure it is parsed as string
# 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: true
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: true
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
set_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'
- name: Adding building nodes with floor subnodes from a YAML variable
community.general.xml:
path: /foo/bar.xml
xpath: /business
add_children:
- building:
# Attributes
name: Scumm bar
location: Monkey island
# Value
+value: unreal
# Subnodes
_:
- floor: Pirate hall
- floor: Grog storage
- construction_date: "1990" # Only strings are valid
- building: Grog factory
# Consider this XML for following example -
#
# <config>
# <element name="test1">
# <text>part to remove</text>
# </element>
# <element name="test2">
# <text>part to keep</text>
# </element>
# </config>
- name: Delete element node based upon attribute
community.general.xml:
path: bar.xml
xpath: /config/element[@name='test1']
state: absent
Возвращаемые значения
Общие возвращаемые значения описаны здесь; ниже перечислены поля, уникальные для этого модуля:
Ключ | Описание |
|---|---|
actions dictionary | Словарь с исходными значениями xpath, namespaces и state. Возвращается: при успешном выполнении Пример: |
count integer | |
matches list / elements=string | Найденные совпадения XPath. Возвращается: если задан параметр |
xmlstring string | Строка XML с результатом выполнения. Возвращается: если задан параметр |
Ссылки на коллекцию
© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections/community/general/xml_module.html