gpt4 book ai didi

python - 没有递归搜索python的xml解析

转载 作者:数据小太阳 更新时间:2023-10-29 02:21:18 24 4
gpt4 key购买 nike

这让我精神错乱,我可能已经研究它很长时间了,所以希望能得到一些帮助,以防止失去/恢复我的理智!基于食物的 xml 只是我希望实现的一个示例。

我有以下文件,我试图将其放入图表中,因此小麦和水果是深度为 0 的父项。印度是深度为 1 的小麦的子项,依此类推。

每一层都有一些关键字。所以我想出去的是

layer, depth, parent, keywords
wheat, 1, ROOT, [bread, pita, narn, loaf]
indian, 2, wheat [chapati]
mumbai, 3, indian, puri
fruit, 1,ROOT, [apple, orange, pear, lemon]

这是一个示例文件 -

<keywords>
<layer id="wheat">
<layer id="indian">
<keyword>chapati</keyword>
<layer id="mumbai">
<keyword>puri</keyword>
</layer>
</layer>
<keyword>bread</keyword>
<keyword>pita</keyword>
<keyword>narn</keyword>
<keyword>loaf</keyword>
</layer>
<layer id="fruit">
<keyword>apple</keyword>
<keyword>orange</keyword>
<keyword>pear</keyword>
<keyword>lemon</keyword>
</layer>

</keywords>

所以这不是图形问题,我可以很容易地做到这一点。我苦苦挣扎的是解析 XML。

如果我做一个

xmldoc = minidom.parse(self.filename)

layers = xmldoc.getElementsByTagName('layer')

layers 只返回所有层元素,这太多了,据我所知没有深度/层次结构的概念,因为它进行递归搜索。

以下帖子不错,但没有提供我需要的概念。 XML Parsing with Python and minidom .谁能帮助我解决这个问题?我可以发布我的代码,但它被黑客攻击在一起/从根本上被破坏了,我认为它对人类或野兽都没有用!

干杯

戴夫

最佳答案

使用lxml .特别是 XPath。你可以获得所有layer元素,无论级别如何,通过 "//layer"layer ID id通过"//layer[id='{}'][0]".format(id) . keyword ".../keyword" 直接位于一个元素(或多个元素)下的元素(其中 ... 是一个查询,它产生应搜索其后代的节点)。

获取给定节点的深度并不那么简单,但仍然很容易。我没有找到现有的函数(afaik,这在 XPath 的域之外 - 虽然你可以检查查询的深度,但你只返回元素,即你可以返回具有特定深度但不是深度本身的节点) ,所以这里是一个手工滚动的(没有递归,因为它不是必需的 - 但一般来说,使用 XML 意味着使用递归,不管你喜欢与否!):

def depth(node):
depth = 0
while node.getparent() is not None:
node = node.getParent()
depth += 1
return depth

DOM 也可以实现非常相似的东西,如果你足够愚蠢,没有使用现存最好的 Python XML 库的话;)

关于python - 没有递归搜索python的xml解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4908738/

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