Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python2-etree中迭代xml节点(元素和文本节点)_Python_Python 2.x - Fatal编程技术网

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

如何在python2-etree中迭代xml节点(元素和文本节点),python,python-2.x,Python,Python 2.x,我有一个xml,其中一个元素包含多个文本节点。使用python2-etree,我希望以相同的顺序浏览树 因此,对于此输入: <body> hello <b>world</b> bye </body> 但是,我在etree中没有看到可以在元素和文本节点上进行迭代的函数 我该怎么做? 我正在查找诸如IterateElements和TextNodes之类的函数不存在: from lxml import etree import utils

我有一个xml,其中一个元素包含多个文本节点。使用python2-etree,我希望以相同的顺序浏览树

因此,对于此输入:

<body>
  hello
  <b>world</b>
  bye
</body>
但是,我在etree中没有看到可以在元素和文本节点上进行迭代的函数

我该怎么做? 我正在查找诸如IterateElements和TextNodes之类的函数不存在:

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来选择上下文节点的所有子节点,不管它们的节点类型如何。 因此,将for循环更改为:

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

可能重复的
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, "")