您确实必须在 everything 上添加命名空间,其中包括
name
节点:x:name
!
所以,你的 XPath 最终会是这样的:
xpath: >-
/x:Activity
/x:ActivityDetails
/x:listOfActivityAttribute
/x:activityAttribute[x:name='CustomerId']
/x:value
鉴于两项任务:
- xml:
path: /tmp/test.xml
xpath: >-
/x:Activity
/x:ActivityDetails
/x:listOfActivityAttribute
/x:activityAttribute[x:name='CustomerId']
/x:value
content: text
namespaces:
x: http://example.com/xsd/frm/v1/Activity/ManageInternalCustomerChangeRequest
register: xmlresp
- debug:
var: xmlresp.matches.0['{' ~ _ns_x ~ '}value']
vars:
_ns_x: http://example.com/xsd/frm/v1/Activity/ManageInternalCustomerChangeRequest
调试最终给出:
ok: [localhost] =>
xmlresp.matches.0['{' ~ _ns_x ~ '}value']: '%CustomerId%'
旁注:要干燥此代码,您可以在上层定义
_ns_x
,然后在“xml”任务中执行:
namespaces:
x: "{{ _ns_x }}"