首页 > 解决方案 > 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>

标签: xmlxpathansible

解决方案


您的文档位于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:了。


推荐阅读