gpt4 book ai didi

Python - lxml - 构建树时如何在树周围 'move'

转载 作者:行者123 更新时间:2023-11-28 18:50:33 25 4
gpt4 key购买 nike

基本问题 - 当您 build 一棵树时,您如何在树中“移动”。

我可以填充第一层:

import lxml.etree as ET

def main():
root = ET.Element('baseURL')
root.attrib["URL"]='www.com'
root.attrib["title"]='Level Title'
myList = [["www.1.com","site 1 Title"],["www.2.com","site 2 Title"],["www.3.com","site 3 Title"]]
for i in xrange(len(myList)):
ET.SubElement(root, "link_"+str(i), URL=myList[i][0], title=myList[i][1])

这给了我类似的东西:

baseURL:
link_0
link_1
link_2

从那里,我想从每个新节点添加一个子树,所以它看起来像:

baseURL:
link_0:
link_A
link_B
link_C
link_1
link_2

我看不到如何将 subElement 调用“指向”下一个节点 - 我试过了:

myList2 = [["www.A.com","site A Title"],["www.B.com","site B Title"],["www.C.com","site C Title"]]
for i in xrange(len(myList2)):
ET.SubElement('link_0', "link_"+str(i), URL=myList2[i][0], title=myList2[i][1])

但这会引发错误:

TypeError:参数“_parent”的类型不正确(应为 lxml.etree._Element,得到 str)

因为我给 subElement 调用一个字符串,而不是元素引用。我还尝试将它作为一个变量(即 link_0' 而不是 "link_0"`),这给出了一个全局缺失变量,所以我的引用显然是不正确的。

如何将我的 lxml 构建器“指向”一个 child 作为 parent ,并编写一个新的 child ?

最佳答案

ET.SubElement(parent_node,type) 创建一个新的 XML 元素节点作为 parent_node 的子节点。它还返回这个新节点。

所以你可以这样做:

import lxml.etree as ET

def main():
root = ET.Element('baseURL')
myList = [1,2,3]
children = []
for x in myList:
children.append( ET.SubElement(root, "link_"+str(x)) )

for y in myList:
ET.SubElement( children[0], "child_"+str(y) )

但是跟踪子项可能是多余的,因为 lxml 已经为您提供了许多访问它们的方法。

这是一种使用内置于子列表中的 lxmls 的方法:

 node = root[0]
for y in myList:
ET.SubElement( node, "child_"+str(y) )

这是一种使用 XPath 的方法(如果您的 XML 变得丑陋,可能会更好)

 node = root.xpath("/baseURL/link_0")[0]
for y in myList:
ET.SubElement( node, "child_"+str(y) )

关于Python - lxml - 构建树时如何在树周围 'move',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13504816/

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