在将SOAP xml作为请求发送之前重写它

时间:2015-10-29 16:10:13

标签: python xml soap elementtree

我需要在发出请求之前重写SOAP XML文件。 我可以发送请求并使用静态文件接收响应而没有任何问题,但我需要更改一些值 我尝试使用ElementTree来操作文件,但我无法找到标记和值。

该文件具有下一种格式:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <bbs:QueryDRRequestMsg>
         <RequestHeader>
                    ...
                </RequestHeader>
         <QueryDRRequest>
            <!--Optional:-->
             <bbs:SubAccessCode>
               <bbc:PrimaryIdentity>56795810005</bbc:PrimaryIdentity>
            </bbs:SubAccessCode>
            <bbs:TimePeriod>
               <bbs:StartTime>20150901010000</bbs:StartTime>
               <bbs:EndTime>20150930010000</bbs:EndTime>
            </bbs:TimePeriod>
            <bbs:TotalDRNum>2</bbs:TotalCDRNum>
            <bbs:BeginRowNum>0</bbs:BeginRowNum>
            <bbs:FetchRowNum>10</bbs:FetchRowNum>
         </QueryDRRequest>
      </bbs:QueryDRRequestMsg>
   </soapenv:Body>
</soapenv:Envelope>

我需要更改标签的值

  

BBC:PrimaryIdentity

  

BBS:开始时间

这些值将取自html表单,并在发送文件作为请求之前使用该数据重写文件。

提前致谢

1 个答案:

答案 0 :(得分:1)

尝试使用ElementTree.iter查看标签的完整文本,例如

import xml.etree.cElementTree as ET

tree = ET.parse("filexml")
root = tree.getroot()

for child_root in root.iter():
    print  child_root.tag, child_root.attrib

通过这种方式,您将看到xml文件元素的完整标记。

要修改您的文件,请尝试此

import xml.etree.cElementTree as ET

tree = ET.parse("file.xml)
root = tree.getroot()

for child_root in root.iter('{http://some_tag}PrimaryIdentity'):
    new_identity = "111111111"
    child_root.text = new_identity
    child_root.set('update','yes')

tree.write('output.xml')