ElementTree元素索引查找

15

我正在使用Python 3.1的xml.etree.ElementTree模块,从另一个结构化文档创建XML文档。

我可以使用哪个ElementTree函数返回现有子元素的索引?

3个回答

13

getchildren方法返回一个Element对象的子元素列表。然后,您可以使用列表的内置索引方法。

>>> import xml.etree.ElementTree as ET
>>> root = ET.Element("html")
>>> head = ET.SubElement(root, "head")
>>> body = ET.SubElement(root, "body")
>>> root.getchildren().index(body)
1

9
提醒一下 - list(root).index(body) 现在是正确的做法。getchildren() 已经被弃用。 - aaaaaa

0
import xml.etree.ElementTree as ET
root=ET.Element('C:\Users\Administrator\Desktop\ValidationToolKit_15.9\ValidationToolKit_15.9\NE3S_VTK\webservice\history\ofas.2017-1-3.10-55-21-608.xml')
childnew=ET.SubElement(root,"354")
root.getchildren().index(childnew)
0
list(root).index(childnew)
0

你可能需要添加一些解释,例如“首先使用getchildren()创建一个列表,然后使用index()获取其索引”。 - Brett Schneider

-1
def alarms_validation(self, path, alarm_no, alarm_text):
    with open(path) as f:
        tree = et.parse(f)
        root = tree.getroot()
        try:
            for x in xrange(10000):
                print x
                for y in xrange(6):
                    print y
                    if root[x][y].text == alarm_no:
                        print "found"
                        if root[x][y+1].text != alarm_text:
                            print "Alarm text is not proper"
                        else:
                            print "Alarm Text is proper"
        except IndexError:
            pass

这正按照我的要求工作。 我正在获取索引,一旦获取索引,我就会验证字符串。 以上发布的内容对我不起作用。 - user2160906
这怎么能算是对问题的回答呢?它似乎完全不相关。 - mzjn
@mzjn,这里的Print x和Print y是元素树的索引。另一种查找索引的方法。 - user2160906
没有人可以直接拿你的代码并运行测试。它并不完整,也不清楚它如何回答问题。“Alarms_Validation”与所问的问题有什么关系? - mzjn
@mzjn 您说得完全正确,没有人可以直接使用这段代码,但可以采用其他方法来查找子元素的索引。 以下是与警报相关的文本,请用户忽略。 请确保 X 和 Y 是索引。 谢谢。 - user2160906

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接