使用Ansible xml模块为指定XML节点添加子节点遇定位问题求助
问题分析与解决方案
你的问题核心是XPath路径语法错误,导致无法正确定位到目标<business type="bar">下的<beers>节点,最终Ansible匹配到了其他节点(最后一个<business>)。
错误点拆解
原XPath /businesss/business/@type[texte()="bar]/beers 存在两个关键问题:
- 拼写错误:
texte()应为XPath标准函数text() - 逻辑错误:你需要筛选的是拥有
type="bar"属性的<business>节点,而非直接定位type属性本身。原路径的写法会定位到business的type属性节点,再尝试找它的beers子节点——这显然不符合XML结构,所以最终匹配失败,Ansible默认选择了最后一个符合部分路径的节点。
修正后的Playbook
将XPath修正为正确的节点筛选逻辑即可:
- name: Add child to bar's beers node xml: path: ./test.xml xpath: /businesss/business[@type="bar"]/beers add_children: - beer: alyne - beer: mira
额外提示
你的XML示例里存在一个小问题:第一个<business type="bar">的<rating>节点被错误嵌套在<beers>节点内部,虽然这不影响本次XPath定位,但建议修正XML结构以保证规范性。
内容的提问来源于stack exchange,提问作者wmeft
相关产品推荐
相关产品推荐

