如何使用Ansible从xml中选择并提取完整的节点以及子节点

时间:2019-07-24 09:53:59

标签: xml ansible

我想对服务器A进行SOAP请求,从响应中获得响应并形成对服务器B的肥皂请求。问题是对服务器A的请求不能精确-这意味着您只能请求例如角色,但不是特定角色。因此,当只给定roleName时,我需要找到并确定节点上所有子项,属性,文本(最多120个)所需的角色。

void Update()
{
  if(Input.GetKeyDown(KeyCode.A)
  {
    GameObject go = GameObject.Find("Cloner");
    Destroy(go);
    SceneManager.LoadScene("Home");
  }
}

我使用xml模块来解析响应:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
               xmlns:ns2="http://www.test.de">
   <soap:Header/>
   <soap:Body>
      <ns2:getRolesResponse xmlns:ns2=\"http://www.test.de">
     <role>
         <info roleName="myrole" roleOperator="UNION" systemType="false">
            <displayName default="MAster_of_desaster"/>
            <description default="Administrator"/>
         </info>
         <rights>
            <documentAccessRights>
               <documentTypeAccess documentTypeName="doc_ty1">
                  <right access="create" outcome="enabled"/>
                  <right access="read" outcome="enabled"/>
               </documentTypeAccess>
               <documentTypeAccess documentTypeName="doc_ty2">
                  <right access="create" outcome="enabled"/>
                  <right access="read" outcome="enabled"/>
                  <right access="update" outcome="enabled"/>
                  <right access="delete" outcome="enabled"/>
               </documentTypeAccess>
...

并使用json_query过滤器解析匹配项。

- name: "extract the role to copy from the soap response"
  xml:
    xmlstring: "{{ out.content }}"
    namespaces:
      soap: http://www.w3.org/2003/05/soap-envelope
      ns2: http://www.test.de/
    xpath: /soap:Envelope/soap:Body/ns2:getRolesResponse/role/info[@roleName="{{ test }}"]/../descendant::*
    content: attribute
  register: xmlresponse

无论如何...匹配破坏了XML层次结构。我只想从“ role”元素中获取整个xml字符串。

有什么想法吗?

更新 xpath应该选择Rolename不是“ xyz”的所有角色

"xmlresponse.matches | json_query('[*].documentTypeAccess')": [
        {
            "documentTypeName": "doc_ty1"
        },
        {
            "documentTypeName": "doc_ty2"
        },

 //role/info[not(@roleName="{{ test }}")]/..

不幸的是,xmlresponse没有注册剩余的xml ... 我在做什么错了?

0 个答案:

没有答案