xml - Ansible - XML 命名空间
问题描述
我有以下 XML:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>nexus-dev-snapshots</id>
<username>user</username>
<password>hahah</password>
</server>
<server>
<id>nexus-dev-releases</id>
<username>user</username>
<password>hahah</password>
</server>
</servers>
<pluginGroups></pluginGroups>
<proxies></proxies>
<mirrors></mirrors>
<profiles></profiles>
</settings>
我正在尝试使用 ansible将新元素添加到镜像中,但收到错误提示我的路径不正确,我相信它与命名空间有关,因为没有它们它可以工作。希望能得到一些帮助,谢谢。
- name: Add a new mirror to the mirrors element
hosts: localhost
connection: local
tasks:
- name: Add new elements
xml:
path: settings.xml
xpath: /xsi:settings/xsi:mirrors/xsi:mirror/xsi:id
value: 1
namespaces:
xmlns: http://maven.apache.org/SETTINGS/1.0.0
xsi: http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd
xml:
path: settings.xml
xpath: /xsi:settings/xsi:mirrors/xsi:mirror/xsi:name
value: 2
namespaces:
xmlns: http://www.w3.org/2001/XMLSchema-instance
xsi: http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd
xml:
path: settings.xml
xpath: /xsi:settings/xsi:mirrors/xsi:mirror/xsi:url
value: 3
namespaces:
xmlns: http://maven.apache.org/SETTINGS/1.0.0
xsi: http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd
最终结果:
<mirrors>
<mirror>
<id>1</id>
<name>2</name>
<url>3</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
解决方案
您的文档位于http://maven.apache.org/SETTINGS/1.0.0
命名空间中。
你的路径应该反映
任务: - 名称:添加新元素 xml: 路径:settings.xml xpath: /m:settings/m:mirrors/m:mirror/m:id 值:1 命名空间: 米:http://maven.apache.org/SETTINGS/1.0.0
XML 文档读取
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0">
<!-- ... -->
</settings>
这意味着该settings
元素及其包含的所有内容都属于http://maven.apache.org/SETTINGS/1.0.0
(除非它明确声明了不同的命名空间,这在您的文档中没有发生)。这称为“默认命名空间”。
由于它是默认命名空间,因此它在 XML 中没有前缀。但是 XPath 通常需要一个前缀才能工作 - 您可以自由选择任何前缀并将其关联到http://maven.apache.org/SETTINGS/1.0.0
. 为了简洁起见,我选择m:
了。
推荐阅读
- java - 如何拆分JavaDStream
并打印该行的第二个单词 - javascript - 是否允许在类的静态属性上使用 super 关键字?
- vue.js - 选项列表中的字体真棒图标未按预期加载(但在选择时)
- javascript - 导航栏不适用于所有部分(html、css、js)
- r - 在函数中使用变量名 [R]
- google-cloud-platform - Google Cloud Platform 上的 VMDK 磁盘映像导入失败
- sql - OPENJSON 中的换行符
- excel - 如何使用字符串变量作为 Workbook 对象的索引?
- android - 我想更快地制作广告 html 代码
- javascript - 哪个 Javascript 事件表示 Angular SPA 已完成页面加载?