Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.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
Python 稍后附加到子元素_Python_Lxml - Fatal编程技术网

Python 稍后附加到子元素

Python 稍后附加到子元素,python,lxml,Python,Lxml,我正在用Python中的lxml.builder构建一个xml,但由于我的代码的性质,我希望稍后找到带有属性的子元素。然后我想给它添加一个子元素。XML将包含文件的散列及其大小和文件名 我查看了lxml文档,但找不到一个满足我要求的函数 base=etree.Element(“数据文件”) header=etree.Element(“header”) 对于[“名称”、“说明”、“版本”、“作者”、“注释”]中的f: 标题变量=etree.Element(f) 如果f==“类别”: header\

我正在用Python中的lxml.builder构建一个xml,但由于我的代码的性质,我希望稍后找到带有属性的子元素。然后我想给它添加一个子元素。XML将包含文件的散列及其大小和文件名

我查看了lxml文档,但找不到一个满足我要求的函数

base=etree.Element(“数据文件”)
header=etree.Element(“header”)
对于[“名称”、“说明”、“版本”、“作者”、“注释”]中的f:
标题变量=etree.Element(f)
如果f==“类别”:
header\u var.text=“标准数据文件”
其他:
header_var.text=“-insert{}-”。格式(f)
header.append(header\u变量)
base.append(头)
游戏=lb.E.游戏(
lb.E.rom(name=f,size=size,crc=hash\u crc32,md5=hash\u md5,sha1=hash\u sha1,name=filename1)
base.append(游戏)
在将
game
元素附加到XML之后,我希望稍后通过使用
game
标记和
name
属性查找元素,并添加另一个子元素,其中包含
rom
。它在一个循环中运行,所以这就是为什么我想先附加到XML。(否则,在插入数据之前,我可能需要制作一个字典来临时存储数据)

最好先确保具有该属性的标记也存在(不知道如何做)

编辑:我把它清理干净了。但它会忽略xpath中的属性。我需要帮助让它停止忽视它

base=etree.Element(“数据文件”)
header=etree.SubElement(基本,“header”)
对于[“名称”、“说明”、“版本”、“作者”、“注释”]中的f:
header\u var=etree.SubElement(header,f)
如果f==“类别”:
header\u var.text=“标准数据文件”
其他:
header_var.text=“-insert{}-”。格式(f)
尝试:
path=etree.xpath(基本,“游戏”,name=filename1)[0]
子元素(路径,“rom”,名称=f,大小=size,crc=hash\U crc32,md5=hash\U md5,sha1=hash\U sha1)
除:
game=etree.SubElement(基本,“game”,name=filename1)
子元素(game,“rom”,name=f,size=size,crc=hash\u crc32,md5=hash\u md5,sha1=hash\u sha1)

XPath将使用
game[@name=$filename]
,在lxml中,我认为应该使用
path=etree.XPath(base,“game”,name=filename1)[0]
而不是
path=base.XPath('game[@name=$filename]”,filename1)[0]

您可以使用它,但这只有在您只有一个
游戏
标签
@Larsenv时才有意义:您的第一种方法是正确的。是否要附加多个