【问题标题】:Parsing XML Soap Response With Python using Element Tree使用元素树使用 Python 解析 XML Soap 响应
【发布时间】:2018-07-10 14:12:21
【问题描述】:

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

<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

【问题讨论】:

    标签: python xml soap elementtree


    【解决方案1】:
    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
    

    【讨论】:

    • 工作就像一个魅力!非常感谢!我叫你什么?上帝?
    • @richie 自己努力比较好,StackOverflow 不是回答作业问题的地方。
    猜你喜欢
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多