gpt4 book ai didi

Python 使用 ElementTree 将新项目插入 XML 子子元素的更简单方法

转载 作者:太空宇宙 更新时间:2023-11-03 16:09:22 26 4
gpt4 key购买 nike

我正在编辑一个配置文件,并希望将新的子元素添加到结构中。我遇到的问题是,在配置文件中,子元素具有相同的名称,并且我还没有找到使用 .find 命令查找插入位置索引的方法。配置文件的示例如下:

<?xml version="1.0" encoding="utf-8"?>

<ConfigurationFile>
<Configuration ItemName="Parent1">
<Category ItemName="Parent2">
<Category ItemName="Parent3">
<Category ItemName="ChildLevelToAdd">
<Option ItemName="x" ValueType="6">5</Option>
<Option ItemName="z" ValueType="6">0</Option>
<Category ItemName="ChildCategory">
<Option ItemName="a" ValueType="1"></Option>
<Option ItemName="b" ValueType="2"></Option>
<Option ItemName="c" ValueType="3">
</Option>
</Category>
</Category>
</Category>
</Category>

我正在尝试添加一个新的“ChildToAdd”类别以及其下方的所有内容。

我尝试了以下代码来索引,但它似乎只能找到第一个子元素:

a = root.find('Configuration') #It is only possible to find sub-elements of the root
b = root.find('Category') #These generate a none type

我发现插入新类别元素的最佳方法是使用:

root[0][0][0].insert(0,ET.Element("Category", ItemName = "NewChild"))

然后,当我想向这个新创建的类别添加选项时,我使用:

root[0][0][0][0].insert(0,ET.Element("NewOption", ItemName = "NewVal", ValueType ="NewType"))

这似乎是一种非常不整洁的方法。我想知道是否有任何更清晰的方法来查找和指定新子子元素(类别)及其 future 子元素(选项)的插入点?

最佳答案

使用XPath表达式,形式为.//element_name 在上下文节点中的任何位置查找元素(在本例中为根元素)。例如,以下内容应返回 <Category> 的第一个实例元素,root 内的任何位置:

root.find('.//Category') 

您还可以使用 XPath 按属性值查找元素。例如,以下内容应返回 <Category>元素其中 ItemName属性值等于“Parent3”:

root.find('.//Category[@ItemName="Parent3"]')

ElementTree 支持一些其他 XPath 语法,如 here 中所述。 .

<小时/>

我还建议将新元素存储在变量中,以便稍后可以向其中添加子元素,而无需再次查询 XML:

c = ET.Element("Category", ItemName = "NewChild")
c.insert(0,ET.Element("NewOption", ItemName = "NewVal", ValueType ="NewType"))

p = root.find('.//Category[@ItemName="Parent3"]')
p.insert(0, c)

关于Python 使用 ElementTree 将新项目插入 XML 子子元素的更简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39426162/

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