【发布时间】:2022-01-13 05:42:11
【问题描述】:
一个关于 XML 的菜鸟问题。我正在使用 ElementTree 将 XML 转换为 df 并最终上传到数据库。我的问题是 XML 格式不标准。我见过的所有 ElementTree 示例都使用不同的格式。它看起来像这样:
<session session_id="9">
<party party_id="1" name="party 1">
<member member_id="1" name="bob"/>
<member member_id="2" name="simon"/>
</party>
<party party_id="2" name="party 2">
<member member_id="3" name="diana"/>
<member member_id="4" name="pablo"/>
</party>
</session>
一方面,所有信息都写在属性中,这不是什么大问题,因为我仍然可以获取它们。但是,我不仅要获取 member 元素的属性,还要获取它们父母的属性。所以结果应该是这样的:
| member_id | member_name | party_id | session_id |
|---|---|---|---|
| 1 | bob | 1 | 9 |
| 2 | simon | 1 | 9 |
| 3 | diana | 2 | 9 |
| 4 | pablo | 2 | 9 |
我使用children = list(root.iter()) 列出所有孩子,然后将它们的属性附加到数据框。但是我失去了与父级的链接,所以我不能真正说出member 来自哪个party 分支,所以我无法分配正确的party_id。
我想知道是否有一种简单的方法可以从这种 XML 结构中获取数据帧?
【问题讨论】:
-
欢迎来到 Stack Overflow。以minimal reproducible example 的形式向我们展示代码。关于获取父级,见stackoverflow.com/q/24239435/407651,stackoverflow.com/q/2170610/407651
-
找到所有的
party标签,并为每一个标签遍历他们的member,也就是说,这样你在看孩子时就知道父母。奇怪的是,ElementTree 中有一个findall()方法,请查看文档。 -
仅供参考,您的 XML 没有任何“非标准”。这只是... xml。
-
仅仅因为你作为一个新手,以前没有见过这样的 XML 并不意味着它是“非标准的”。你真的应该重新考虑你的学习策略:阅读你用来学习它们概念的技术,而不是每次遇到新事物时都感到惊讶。
标签: python xml dataframe elementtree