使用Python查询XML子代

时间:2017-03-07 21:15:10

标签: python xml api tableau

我使用Python使用API​​查询我的Tableau服务器。我提取每个工作簿的修订历史记录,并尝试查看哪个用户进行了每次编辑。在revision元素中,有一个用户的子元素。我试图了解如何从该子元素中提取用户名并将其与正确的修订数据相关联。

以下是返回的xml数据的示例行:

<tsResponse>
  <revisions>
    <revision revisionNumber="1" publishedAt="2017-01-17 T20:43:40Z" 
     deleted="false" current="true" sizeInBytes="1939262">
    <publisher id="53f212f3" name="1563524" />
    </revision>
  </revisions>
</tsresponse>

包含id和name的元素是我尝试获取数据的地方。我能够将它拉入第二个字典列表,但我需要将所有数据放在一个字典中,这样我就可以解析标题并输出到csv。这是我写过的相关代码:

Pub = []
Rev = []
RevDet = []
revisions = server_response_WB2.findall('.//t:revision', namespaces=xmlns)
publishers = server_response_WB2.findall('.//t:publisher', namespaces=xmlns)
for revision in revisions:
    d = {}
    d['workbook id'] = workbookid[i]
    d['workbook name'] = workbooknames[i]
    d['revision number'] = revision.get('revisionNumber')
    d['revision created at'] = revision.get('publishedAt')
    d['is deleted'] = revision.get('deleted')
    d['is current'] = revision.get('current')
    Rev.append(d)
for publisher in publishers:
    d = {}
    d['user name'] = publisher.get('name')
    Pub.append(d)
RevDet.append(Rev[i])
RevDet.append(Pub[i])

正如您所看到的,最后我将两个字典列表附加到RevDet,因此数据密切相关。例如,RevDet的元素0和元素1将分别包含关联的修订版本和发布者数据。关于如何更好地处理这个的任何想法?我的下一步应该是什么?

1 个答案:

答案 0 :(得分:1)

revision.find('t:publisher', namespaces=xmlns)为您提供包含的元素,然后在第一个for语句中使用revision.find('t:publisher', namespaces=xmlns).get('name')来提取值。