python xml.etree.ElementTree 根据文本子元素添加子元素或父元素
python xml.etree.ElementTree add subelement to parent based on subelement text
我有以下示例 xml 文件:
<root>
<input_file>
<type>x</type>
</input_file>
<input_file>
<type>y</type>
</input_file>
</root>
并想使用 python xml.etree.ElementTree 添加基于 <type>
标签的子元素。示例:
将带有文本 'z' 的 <path></path>
标签添加到 <type>x</type>
,例如:
<root>
<input_file>
<type>x</type>
<path>z</path>
</input_file>
<input_file>
<type>y</type>
</input_file>
</root>
这是我对 python 代码的尝试:
import xml.etree.ElementTree as ET
xml_file = 'test.xml'
tree = ET.parse(xml_file)
root = tree.getroot()
for input_file in root.findall('input_file'):
type_element = input_file.find('type')
if type_element.text == 'x':
c = ET.SubElement(input_file, 'path')
c.text('z')
print (ET.tostring(root))
我收到类型错误:
c.text('z')
TypeError: 'NoneType' object is not callable
我知道如果类型是属性而不是子标签会更容易(即 <input_file type='x'></input_file>
但事实并非如此
是否需要先发起亲子关系?
谢谢。
在这个实例中,c.text
不是一个方法,它是一个实例变量。您可以对照 help(c)
的输出检查它。将方法调用更改为赋值语句。
| Data descriptors defined here:
|
| attrib
| A dictionary containing the element's attributes
|
| tag
| A string identifying what kind of data this element repre
sents
|
| tail
| A string of text directly after the end tag, or None
|
| text
| A string of text directly after the start tag, or None
c.text = "z"
或者您可以在对 c.__init__
的调用中分配 c.text
c = ET.SubElement(input_file, 'path', text="z")
https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element
我有以下示例 xml 文件:
<root>
<input_file>
<type>x</type>
</input_file>
<input_file>
<type>y</type>
</input_file>
</root>
并想使用 python xml.etree.ElementTree 添加基于 <type>
标签的子元素。示例:
将带有文本 'z' 的 <path></path>
标签添加到 <type>x</type>
,例如:
<root>
<input_file>
<type>x</type>
<path>z</path>
</input_file>
<input_file>
<type>y</type>
</input_file>
</root>
这是我对 python 代码的尝试:
import xml.etree.ElementTree as ET
xml_file = 'test.xml'
tree = ET.parse(xml_file)
root = tree.getroot()
for input_file in root.findall('input_file'):
type_element = input_file.find('type')
if type_element.text == 'x':
c = ET.SubElement(input_file, 'path')
c.text('z')
print (ET.tostring(root))
我收到类型错误:
c.text('z')
TypeError: 'NoneType' object is not callable
我知道如果类型是属性而不是子标签会更容易(即 <input_file type='x'></input_file>
但事实并非如此
是否需要先发起亲子关系?
谢谢。
在这个实例中,c.text
不是一个方法,它是一个实例变量。您可以对照 help(c)
的输出检查它。将方法调用更改为赋值语句。
| Data descriptors defined here: | | attrib | A dictionary containing the element's attributes | | tag | A string identifying what kind of data this element repre sents | | tail | A string of text directly after the end tag, or None | | text | A string of text directly after the start tag, or None
c.text = "z"
或者您可以在对 c.__init__
c.text
c = ET.SubElement(input_file, 'path', text="z")
https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element