如何在Ansible中从xml响应中读取和检索多个值

如何在Ansible中从xml响应中读取和检索多个值,xml,ansible,yaml,Xml,Ansible,Yaml,我正在使用Ansible,并试图从一个xml检索多个标记的值。我已经找到了如何从1个标记中检索值,但是我需要从许多不同的标记中检索值。特别是,我知道如果你想检索1个标签的值,你可以在剧本中这样做: (item=[{vlan-tag': '5071'}, {'vlan-tag': '5072'}]) => { "msg": [ { "vlan-tag": "5071" }, { "vlan-tag": "5072" } ]

我正在使用Ansible,并试图从一个xml检索多个标记的值。我已经找到了如何从1个标记中检索值,但是我需要从许多不同的标记中检索值。特别是,我知道如果你想检索1个标签的值,你可以在剧本中这样做:

(item=[{vlan-tag': '5071'}, {'vlan-tag': '5072'}]) => {
"msg": [
    {
        "vlan-tag": "5071"
    }, 
    {
        "vlan-tag": "5072"
    }
] 

所以我可以使用这个xml模块,但是如果我想要有多个“xpath”,我该怎么做呢

如果我理解正确并且基于您链接中提供的示例。我将使用带有子键的Ansible循环:

playbook.yml

---
-主机:本地主机
收集事实:不
任务:
-名称:检索多个xml标记值
xml:
xmlstring:“{{item.string}}”
xpath:“{item.path}}”
内容:文本
循环:
-{路径:“/value”,字符串:“foo”}
-{路径:“/tag/other value”,字符串:“bar”}
寄存器:标记值
-调试:
msg:“{item.matches}”
循环:“{tags_value.results}}”
回路控制:
标签:“{item.matches}”
结果

PLAY[localhost]*******************************************************************************************************************************************************************************************
任务[检索多个xml标记值]********************************************************************************************************************************************************************
确定:[localhost]=>(项={u'path':u'/value',u'string':u'foo'})
确定:[localhost]=>(项={u'path':u'/tag/other value',u'string':u'bar'})
任务[调试]***********************************************************************************************************************************************************************************************
确定:[localhost]=>(项=[{u'value':u'foo}])=>{
“味精”:[
{
“值”:“foo”
}
]
}
确定:[localhost]=>(项=[{u'other-value':u'bar}])=>{
“味精”:[
{
“其他值”:“条”
}
]
}
重演*************************************************************************************************************************************************************************************************
localhost:ok=2已更改=0无法访问=0失败=0

如果我理解正确并基于链接中提供的示例。我将使用带有子键的Ansible循环:

playbook.yml

---
-主机:本地主机
收集事实:不
任务:
-名称:检索多个xml标记值
xml:
xmlstring:“{{item.string}}”
xpath:“{item.path}}”
内容:文本
循环:
-{路径:“/value”,字符串:“foo”}
-{路径:“/tag/other value”,字符串:“bar”}
寄存器:标记值
-调试:
msg:“{item.matches}”
循环:“{tags_value.results}}”
回路控制:
标签:“{item.matches}”
结果

PLAY[localhost]*******************************************************************************************************************************************************************************************
任务[检索多个xml标记值]********************************************************************************************************************************************************************
确定:[localhost]=>(项={u'path':u'/value',u'string':u'foo'})
确定:[localhost]=>(项={u'path':u'/tag/other value',u'string':u'bar'})
任务[调试]***********************************************************************************************************************************************************************************************
确定:[localhost]=>(项=[{u'value':u'foo}])=>{
“味精”:[
{
“值”:“foo”
}
]
}
确定:[localhost]=>(项=[{u'other-value':u'bar}])=>{
“味精”:[
{
“其他值”:“条”
}
]
}
重演*************************************************************************************************************************************************************************************************
localhost:ok=2已更改=0无法访问=0失败=0

好的,让我们假设从1个循环中我得到:

=> (item=[{vlan-member-interface': 'at-0/0/0.0*'}, {vlan-member-interface': 'at-0/0/1.0*'}]) => {
"msg": [
    {
        "vlan-member-interface": "at-0/0/0.0*"
    }, 
    {
        "vlan-member-interface": "at-0/0/1.0*"
    }
]
}

从第二个循环来看,类似这样的情况:

(item=[{vlan-tag': '5071'}, {'vlan-tag': '5072'}]) => {
"msg": [
    {
        "vlan-tag": "5071"
    }, 
    {
        "vlan-tag": "5072"
    }
] 

如何将循环组合在一起,以便在一个结果中得到at-0/0/0.0和5071?最后一个问题是我能从列表中提取出50715072吗?我试图将此响应作为一个字典来处理并解析值,但我做错了@SolalVall

好吧,假设从1个循环中我得到了以下结果:

=> (item=[{vlan-member-interface': 'at-0/0/0.0*'}, {vlan-member-interface': 'at-0/0/1.0*'}]) => {
"msg": [
    {
        "vlan-member-interface": "at-0/0/0.0*"
    }, 
    {
        "vlan-member-interface": "at-0/0/1.0*"
    }
]
}

从第二个循环来看,类似这样的情况:

(item=[{vlan-tag': '5071'}, {'vlan-tag': '5072'}]) => {
"msg": [
    {
        "vlan-tag": "5071"
    }, 
    {
        "vlan-tag": "5072"
    }
] 

如何将循环组合在一起,以便在一个结果中得到at-0/0/0.0和5071?最后一个问题是我能从列表中提取出50715072吗?我试图将此响应作为字典处理并解析值,但我做错了@SolalVall

是的,它工作正常,完全符合我的要求!!!非常感谢你!!!我可以再问你一件事吗?如果在任何情况下,您想要将2条路径分组到1中,您如何才能做到这一点?假设我们有3条类似于您提供的路径,但我们想将其中的2条作为一对放在一起?有可能吗@SolalWall你能提供更多你想要实现的细节/例子吗?请我在下面写另一个答案,因为我的问题太长,无法发表评论@SolalWall,因为你试图实现与原始问题不同的目标,请你在同一篇文章中创建另一个问题而不是发布答案,并在此处提供链接。(+你能在新帖子中提供一个xml内容的基本示例吗)是的,它工作正常,exactl