简体   繁体   English

如何使用Python解析SOAP XML

[英]How to parse SOAP XML with Python

I have some SOAP responses saved in a file which I would like to parse, 我有一些SOAP响应保存在我想解析的文件中,

Part of example file: 示例文件的一部分:

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
    <ns0:GetList_Operation_0Response xmlns:ns0="urn:COMPANY:TEST:Assets" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <ns0:getListValues>
            <ns0:Status>New</ns0:Status>
            <ns0:FormType>Support Group</ns0:FormType>
            <ns0:PersonRole>Supported by</ns0:PersonRole>
            <ns0:FullName>Data Centre</ns0:FullName>
            <ns0:PeopleGroupFormEntryID>SG0003</ns0:PeopleGroupFormEntryID>
            <ns0:PeopleGroupInstanceID>ASDAWDASDWADSDWSDWDS</ns0:PeopleGroupInstanceID>
            <ns0:AssetClassId>UPS</ns0:AssetClassId>
            <ns0:AssetInstanceId>ASDAWDDAWSDWADS66666</ns0:AssetInstanceId>
        </ns0:getListValues>
        <ns0:getListValues>
            <ns0:Status>New</ns0:Status>
            <ns0:FormType>Support Group</ns0:FormType>
            <ns0:PersonRole>Supported by</ns0:PersonRole>
            <ns0:FullName>Unix</ns0:FullName>
            <ns0:PeopleGroupFormEntryID>SG0004</ns0:PeopleGroupFormEntryID>
            <ns0:PeopleGroupInstanceID>ASDAWDASDWADSDWSDWQQ</ns0:PeopleGroupInstanceID>
            <ns0:AssetClassId>COMPUTERSYSTEM</ns0:AssetClassId>
            <ns0:AssetInstanceId>ASDAWDDAWSDWADS55555</ns0:AssetInstanceId>
        </ns0:getListValues>
    </ns0:GetList_Operation_0Response>
</soapenv:Body>

I would like to get (FullName & AssetInstanceId): 我想获取(FullName&AssetInstanceId):

Data Centre;ASDAWDDAWSDWADS66666
Unix;ASDAWDDAWSDWADS55555

Could you suggest the best method to do that? 您能建议最好的方法吗? Whenever I try to do that with ElementTree I get error of 每当我尝试使用ElementTree进行操作时,都会收到以下错误消息:

"SyntaxError: expected path separator (:)"

Probably because of ns0: annex in beginning of every line 可能是由于ns0:每行开头的附件

Looks like your xml is broken. 看起来您的xml已损坏。 You can try using regex to get the required values 您可以尝试使用正则表达式获取所需的值

Demo: 演示:

a = """<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><ns0:GetList_Operation_0Response xmlns:ns0="urn:COMPANY:TEST:Assets" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns0:getListValues>
    <ns0:Status>New</ns0:Status>
    <ns0:FormType>Support Group</ns0:FormType>
    <ns0:PersonRole>Supported by</ns0:PersonRole>
    <ns0:FullName>Data Centre</ns0:FullName>
    <ns0:PeopleGroupFormEntryID>SG0003</ns0:PeopleGroupFormEntryID>
    <ns0:PeopleGroupInstanceID>ASDAWDASDWADSDWSDWDS</ns0:PeopleGroupInstanceID>
    <ns0:AssetClassId>UPS</ns0:AssetClassId>
    <ns0:AssetInstanceId>ASDAWDDAWSDWADS66666</ns0:AssetInstanceId>
</ns0:getListValues>
<ns0:getListValues>
    <ns0:Status>New</ns0:Status>
    <ns0:FormType>Support Group</ns0:FormType>
    <ns0:PersonRole>Supported by</ns0:PersonRole>
    <ns0:FullName>Unix</ns0:FullName>
    <ns0:PeopleGroupFormEntryID>SG0004</ns0:PeopleGroupFormEntryID>
    <ns0:PeopleGroupInstanceID>ASDAWDASDWADSDWSDWQQ</ns0:PeopleGroupInstanceID>
    <ns0:AssetClassId>COMPUTERSYSTEM</ns0:AssetClassId>
    <ns0:AssetInstanceId>ASDAWDDAWSDWADS55555</ns0:AssetInstanceId>
</ns0:getListValues>"""

import re
FullName = re.findall("<ns0:FullName>(.*?)</ns0:FullName>", a)
AssetInstanceId = re.findall("<ns0:AssetInstanceId>(.*?)</ns0:AssetInstanceId>", a)
for i in zip(FullName, AssetInstanceId):
    print(i)

Output: 输出:

'Data Centre', 'ASDAWDDAWSDWADS66666'
'Unix', 'ASDAWDDAWSDWADS55555'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM