cmprescott.xml
ansible-xml
这是一个用于操作 XML 文件和字符串的 Ansible 模块。该模块目前处于 Ansible 的开发版本中,预计将在 九月中旬 作为 Ansible 2.4.0 的一部分发布。因此,所有问题应报告给 ansible。
安装
- 该模块需要 Python 的
libxml
版本 2.3 或更高版本的绑定。通常在名为python-lxml
的包中。可以使用apt-get install python-lxml
、yum install python-lxml
或pip install lxml
来安装。 - 该模块不包含在 Ansible v2.3 及以下版本中。可以使用
git clone https://github.com/cmprescott/ansible-xml.git
, 或ansible-galaxy install cmprescott.xml
进行安装。有效的安装路径可以是 剧本的库目录、 剧本的角色目录并包含在剧本中, 或 Ansible 的模块路径。
备注
- 原始模块由 @github_rhinception 创建。
- 2015年5月5日,@tbielawa 将项目转交给 @cmprescott 以解决 问题 #16。
- 2017年8月8日,该模块已合并到 Ansible 中。
- 此软件在 GPLv3 许可下提供。
- 您好,我们有单元测试!
什么是 XPath?
"XPath 使用路径表达式在 XML 文档中选择节点或节点集合。 通过遵循路径或步骤来选择节点。"
基本上,它是一种语法,允许您在 XML 文件中选择特定的或一组元素或属性。
单元测试
该存储库中还包含 单元测试。如果您需要更多示例,请参考这些内容,以及 Travis-CI 配置。
示例
给定:
<?xml version='1.0' encoding='UTF-8'?>
<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>
移除 rating 元素的 subjective
属性:
xml:
path: /foo/bar.xml
xpath: /business/rating/@subjective
state: absent
将 rating 设置为 11
xml:
path: /foo/bar.xml
xpath: /business/rating
value: 11
获取 beers 节点的计数
xml:
path: /foo/bar.xml
xpath: /business/beers/beer
count: yes
register: hits
debug:
var: hits.count
向 business
元素添加 phonenumber
元素,适用时隐式
mkdir -p
行为(自动创建父 XML 节点)
xml:
path: /foo/bar.xml
xpath: /business/phonenumber
value: 555-555-1234
假设有一个 vars.yaml 文件,内容如下:
new_beers:
- beer: "Old Rasputin"
- beer: "Old Motor Oil"
- beer: "Old Curmudgeon"
然后剧本语法如下所示:
xml:
path: /foo/bar.xml
xpath: /business/beers
add_children: '{{ new_beers }}'
同样,但在线内完成
xml:
path: /foo/bar.xml
xpath: /business/beers
add_children:
- beer: "Old Rasputin"
- beer: "Old Motor Oil"
- beer: "Old Curmudgeon"
向 website
元素添加 validxhtml
元素。注意,state
默认为 present
,value
默认为
null
,结果为类似
<website><validxhtml />...</website>
xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml
向 validxhtml
元素添加一个空的 validatedon
属性。这实际上使最后一个示例变得多余,因为隐式创建父节点的行为。结果为类似
<website><validxhtml validatedon='' />...</website>
(1/2) 从 website 元素中移除所有子节点:
xml:
path: /foo/bar.xml
xpath: /business/website/*
state: absent
(2/2) 从 website 元素中移除所有子节点:
xml:
path: /foo/bar.xml
xpath: /business/website
children: []
问题?如果您有 <beers><child01 /><child02 /></beers>
如果您说:
xml:
path: /foo/bar.xml
xpath: /beers
value
默认为一个元素,因此这将删除子元素。