Как проанализировать SOAP XML с помощью Python - PullRequest
0 голосов
/ 07 мая 2018

У меня есть несколько SOAP-ответов, сохраненных в файле, который я хотел бы проанализировать,

Часть файла примера:

<?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>

Я хотел бы получить (FullName & AssetInstanceId):

Data Centre;ASDAWDDAWSDWADS66666
Unix;ASDAWDDAWSDWADS55555

Не могли бы вы предложить лучший способ сделать это? Всякий раз, когда я пытаюсь сделать это с ElementTree, я получаю ошибку

"SyntaxError: expected path separator (:)"

Возможно, из-за приложения ns0: в начале каждой строки

1 Ответ

0 голосов
/ 07 мая 2018

Похоже, ваш xml сломан. Вы можете попробовать использовать регулярные выражения, чтобы получить необходимые значения

Демо:

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)

Выход:

'Data Centre', 'ASDAWDDAWSDWADS66666'
'Unix', 'ASDAWDDAWSDWADS55555'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...