gpt4 book ai didi

python - 使用 python elementtree 将 xml 解析为行项目

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:28 27 4
gpt4 key购买 nike

使用 Python 和 Elementtree,我在将 XML 解析为文本行项目时遇到问题,这样每个行项目仅代表一个级别,不多也不少。每个行项目最终将成为数据库中的一条记录,以便用户可以在该字段内搜索多个术语。示例 XML:

?xml version="1.0" encoding="utf-8"?>
<root>
<mainTerm>
<title>Meat</title>
<see>protein</see>
</mainTerm>
<mainTerm>
<title>Vegetables</title>
<see>starch</see>
</mainTerm>
<mainTerm>
<title>Fruit</nemod></title>
<term level="1">
<title>Apple</title>
<code>apl</code>
</term>
<term level="1">
<title>Red Delicious</title>
<code>rd</code>
<term level="2">
<title>Large Red Delicious</title>
<code>lrd</code>
</term>
<term level="2">
<title>Medium Red Delicious</title>
<code>mrd</code>
</term>
<term level="2">
<title>Small Red Delicious</title>
<code>mrd</code>
</term>
<term level="1">
<title>Grapes</title>
<code>grp</code>
</term>
<term level="1">
<title>Peaches</title>
<code>pch</code>
</term>
</mainTerm>
</root>

期望的输出:

Meat > protein
Vegetables > starch
Fruit > Apple > apl
Fruit > Apple > apl > Red Delicious > rd
Fruit > Apple > apl > Red Delicious > rd > Large Red Delicious > lrd
Fruit > Apple > apl > Red Delicious > rd > Medium Red Delicious > mrd
Fruit > Apple > apl > Red Delicious > rd > Small Red Delicious > srd
Fruit > Grapes > grp
Fruit > Peaches > pch

使用标签“mainTerm”来解析 XML 很容易,但棘手的部分是将每一行限制为只有一个级别,但同时在文本中也包含上层术语。我基本上试图通过创建独特的文本行来“展平”XML 层次结构,每一行都列出其父级(例如 Fruit > Apple > apl),但不列出其 sibling (例如 Large Red Delicious、Medium Red Delicious 或 Small Red可口的)。

我意识到这可以通过首先将数据转换为关系数据库格式,然后运行查询等来完成,但我希望直接从 XML 获得更直接的解决方案。

希望这是有道理的......谢谢

最佳答案

有一个很好的工具,叫做 xmltodict这从 xml 中创建了一个分层数据结构:

import json
import xmltodict


data = """your xml goes here"""

result = xmltodict.parse(data)
print(json.dumps(result, indent=4))

对于您提供的 xml(进行了一些更改以使其格式正确,请参阅我的评论),它会打印:

{
"root": {
"mainTerm": [
{
"title": "Meat",
"see": "protein"
},
{
"title": "Vegetables",
"see": "starch"
},
{
"title": "Fruit",
"term": [
{
"@level": "1",
"title": "Apple",
"code": "apl"
},
{
"@level": "1",
"title": "Red Delicious",
"code": "rd",
"term": [
{
"@level": "2",
"title": "Large Red Delicious",
"code": "lrd"
},
{
"@level": "2",
"title": "Medium Red Delicious",
"code": "mrd"
},
{
"@level": "2",
"title": "Small Red Delicious",
"code": "mrd"
}
]
},
{
"@level": "1",
"title": "Grapes",
"code": "grp"
},
{
"@level": "1",
"title": "Peaches",
"code": "pch"
}
]
}
]
}
}

关于python - 使用 python elementtree 将 xml 解析为行项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22926043/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com