python - 稍后附加到子元素
问题描述
我正在用 Python 中的 lxml.builder 构建一个 xml,但由于我的代码的性质,我想稍后找到具有属性的子元素。然后我想添加一个子元素。XML 将包含文件的哈希值及其大小和文件名。
我查看了 lxml 文档,但找不到可以满足我需求的函数。
base = etree.Element("datafile")
header = etree.Element("header")
for f in ["name", "description", "version", "author", "comment"]:
header_var = etree.Element(f)
if f == "category":
header_var.text = "Standard DatFile"
else:
header_var.text = "-insert {}-".format(f)
header.append(header_var)
base.append(header)
game = lb.E.game(
lb.E.rom(name=f, size=size, crc=hash_crc32, md5=hash_md5, sha1=hash_sha1), name=filename1)
base.append(game)
在将元素附加到 XML 之后,我想稍后通过使用标记和属性game
查找元素并在其中添加另一个子元素来再次访问它。它循环运行,这就是为什么我想先附加到 XML。(否则,我可能不得不制作一个字典来在插入数据之前临时存储数据)。game
name
rom
最好先确保具有该属性的标签也存在(不知道该怎么做)。
编辑:我清理了它。它忽略了 xpath 中的属性。我需要帮助让它停止忽视它。
base = etree.Element("datafile")
header = etree.SubElement(base, "header")
for f in ["name", "description", "version", "author", "comment"]:
header_var = etree.SubElement(header, f)
if f == "category":
header_var.text = "Standard DatFile"
else:
header_var.text = "-insert {}-".format(f)
try:
path = etree.xpath(base, "game", name=filename1)[0]
etree.SubElement(path, "rom", name=f, size=size, crc=hash_crc32, md5=hash_md5, sha1=hash_sha1)
except:
game = etree.SubElement(base, "game", name=filename1)
game.SubElement(game, "rom", name=f, size=size, crc=hash_crc32, md5=hash_md5, sha1=hash_sha1)
解决方案
XPath 将使用game[@name = $filename]
and 在 lxml 我认为而不是path = etree.xpath(base, "game", name=filename1)[0]
你想要的path = base.xpath('game[@name = $filename]', filename=filename1)[0]
。
推荐阅读
- database - 如何从一个 Postgres 实例克隆整个数据库,成为托管在不同实例上的数据库的一部分?
- .net - 输出的 JSON 文件重复数组名称(VB.NET、Newtonsoft.JSON)
- symfony - Sylius - 全局分页参数
- python - 使用python从站点中提取文本
- java - 如何使用 java 读取来自 kotlin 类的回调(Android)
- c# - 在不同应用程序类型中使用相同代码时的不同结果
- javascript - 如何在 chrome 上强制使用 quirks 模式(compatMode 上的“BackCompat”属性)?
- sql-server - 按 T1.* 分组?按表 1 中的所有列分组,按表 2 左连接,以及 T2 列上的聚合函数?
- java - 自定义注解的 Spring Boot Java 实现
- sql - 需要使用更新通过以下查询获取的数据的备用行。无法在更新语句ms sql server中使用寡妇功能