使用元素树用 Python 解析 XML Soap 响应

Parsing XML Soap Response With Python using Element Tree

我有一个 XML 这种格式的 Soap 响应,其中包含以下信息用户名:Fulname:状态:状态持续时间:

<return>
        <columns>
            <values>
                <data>Username</data>
                <data>Full Name</data>
                <data>State</data>
                <data>State Duration</data>
            </values>
        </columns>
        <rows>
            <values>
                <data>user1@test.com</data>
                <data>User1</data>
                <data>Logged Out</data>
                <data>309</data>
            </values>
        </rows>
        <rows>
            <values>
                <data>user2@test.com</data>
                <data>User2</data>
                <data>Logged In</data>
                <data>165</data>
            </values>
        </rows>
        <rows>
            <values>
                <data>user3@test.com</data>
                <data>User3</data>
                <data>Logged Out</data>
                <data>109</data>
            </values>
        </rows>
   </return>

我想获得登录用户总数,在这种情况下结果将是 - “1” 登录用户的名称 - "user2" 以及状态持续时间的总和 - 309+165+109

首先,我使用

from xml.etree import ElementTree
root = ElementTree.fromstring(input_data['tmp'])
tree = ElementTree.parse(input_data['tmp'])
print tree.find('.//Data').text
input_data = """<return>
        <columns>
            <values>
                <data>Username</data>
                <data>Full Name</data>
                <data>State</data>
                <data>State Duration</data>
            </values>
        </columns>
        <rows>
            <values>
                <data>user1@test.com</data>
                <data>User1</data>
                <data>Logged Out</data>
                <data>309</data>
            </values>
        </rows>
        <rows>
            <values>
                <data>user2@test.com</data>
                <data>User2</data>
                <data>Logged In</data>
                <data>165</data>
            </values>
        </rows>
        <rows>
            <values>
                <data>user3@test.com</data>
                <data>User3</data>
                <data>Logged Out</data>
                <data>109</data>
            </values>
        </rows>
   </return>"""

from xml.etree import ElementTree
root = ElementTree.fromstring(input_data)
data = [c.text for c in root.findall('.//rows/values/data')]
i = 1
for u, l in zip(data[::4], data[2::4]):
    if l == 'Logged In':
        print('"%i" Name of logged in users - "%s"' % (i, u))
        i += 1
print('Duration: %i' % sum(int(d) for d in data[3::4]))

输出:

"1" Name of logged in users - "user2@test.com"
Duration: 583