【发布时间】:2017-03-13 22:13:40
【问题描述】:
我正在使用 Python 通过 API 解析从我的 Tableau 服务器返回的一些 XML。涉及命名空间,我想我可能对它们的工作原理缺乏一些基本的了解。这是我的 XML 的样子:
<tsResponse version-and-namespace-settings>
<parent type="Project" id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" />
<permissions>
<workbook id="1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d" name="Finance">
<owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
</workbook>
<granteeCapabilities>
<group id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"/>
<capabilities>
<capability name="Read" mode="Allow"/>
<capability name="Filter" mode="Allow"/>
<capability name="ViewUnderlyingData" mode="Allow"/>
<capability name="ExportImage" mode="Allow"/>
<capability name="ExportData" mode="Allow"/>
<capability name="AddComment" mode="Allow"/>
<capability name="ViewComments" mode="Allow"/>
<capability name="ShareView" mode="Allow"/>
</capabilities>
</granteeCapabilities>
</permissions>
</tsResponse>
这是我正在运行的代码,已精简到出现问题的位置。我的目标是首先识别给定工作簿 ID 下的每个组 ID,然后找到该组下的每个功能。
xmlns = {'t': 'http://tableau.com/api'}
test_response1 = []
test_response2 = []
url = "tableau.my.org/api/2.4/sites/siteid/workbooks/workbookid/permissions?pageSize=1000".format()
server_response_WB2 = requests.get(url, headers={'x-tableau-auth': auth_token})
test_response1.append(server_response_WB2.text)
server_response_WB2 = ET.fromstring(_encode_for_display(server_response_WB2.text))
permissions = server_response_WB2.findall('.//t:permissions', namespaces=xmlns)
for permission in permissions:
capabilities = permission.findall('granteeCapabilities')
test_response2.append(capabilities)
print test_response1
print test_response2
test_response1 包含如下列表:
[[<Element '{http://tableau.com/api}permissions' at 0x3c07d70>],
[<Element '{http://tableau.com/api}permissions' at 0x3bb8dd0>]]
test_response2 然而,返回一个空列表列表:
[[], [], []]
在上面的代码中,我正在寻找“granteeCapabilities”作为标签。我还尝试使用命名空间将其作为路径查找,如下所示:
capabilities = permission.findall('.//t:permissions/granteeCapabilities', namespaces=xmlns)
这会返回相同的结果。空列表的列表。为什么我可以找到权限下的数据,但不能找到较低级别的数据?
【问题讨论】:
标签: python xml api xml-namespaces tableau-api