gpt4 book ai didi

python - 如何在 python2 etree 中迭代 xml 节点(元素和文本节点)

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:59 25 4
gpt4 key购买 nike

我有一个 xml,其中一个元素包含多个文本节点。使用 python2 etree,我想以相同的顺序导航树。

因此,对于此输入:

<body>
hello
<b>world</b>
bye
</body>

我需要能够按这个确切的顺序生成此输出:

tag: body
text: hello
tag: b
text: world
text: bye

但是,我在 etree 中没有看到迭代元素和文本节点的函数。

我怎样才能做到这一点?我正在寻找诸如(函数 iterateElementsAndTextNodes 不存在)之类的东西:

from lxml import etree
import utils

doc = etree.XML("""<body>hello<b>world</b>bye</body>""")

def printNode(node, prefix):
if isinstance(node, str):
print prefix + "text: " + node
else:
print prefix + "tag:" + node.tag
for c in node.iterateElementsAndTextNodes():
printNode(c, prefix + " ")

printNode(doc, "")

最佳答案

我们可以在 xpath 中使用 child::node() 来选择上下文节点的所有子节点,无论它们的节点类型如何。 Read about it here.因此,将 for 循环更改为:

for c in node.xpath("child::node()"):
printNode(c, prefix + " ")

代码:

from lxml import etree
import utils

doc = etree.XML("""<body>hello<b>world</b>bye</body>""")
#print "doc is", etree.tostring(doc)
def printNode(node, prefix):
if isinstance(node, etree._ElementStringResult):
print prefix + "text: " + node
else:
print prefix + "tag: " + node.tag
for c in node.xpath("child::node()"):
printNode(c, prefix + " ")
printNode(doc, "")

关于python - 如何在 python2 etree 中迭代 xml 节点(元素和文本节点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43282032/

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