我们可以在xml中使用etree findall()搜索多个模式吗?

2024-04-19 20:42:34 发布

您现在位置:Python中文网/ 问答频道 /正文

对于我的例子,我必须在XML文件中找到几个元素,并使用text属性更新它们的值。为此,我必须搜索xml元素A、B和C。我的项目使用xml.etree和python语言。目前我正在使用:

self.get_root.findall(H/A/T)
self.get_root.findall(H/B/T)
self.get_root.findall(H/C/T)

示例XML文件:

<H><A><T>text-i-have-to-update</H></A></T>
<H><B><T>text-i-have-to-update</H></B></T>
<H><C><T>text-i-have-to-update</H></C></T>

正如我们所注意到的,只有路径中的中间元素是不同的。有没有一种方法可以使用类似self.get_root.findall(H|(A,B,C)|T)的东西来优化代码?任何方向正确的指导都可以!谢谢

我也问过类似的问题:XPath to select multiple tags但这对我的案子不起作用

更新:可能是findall()中的正则表达式


Tags: 文件to项目textself元素get属性
1条回答
网友
1楼 · 发布于 2024-04-19 20:42:34

您问题中的html格式不正确;假设格式正确(如下所示),请尝试以下操作:

import xml.etree.ElementTree as ET

data = """<root>
<H><A><T>text-i-have-to-update</T></A></H>
<H><B><T>text-i-have-to-update</T></B></H>
<H><C><T>text-i-have-to-update</T></C></H>
</root>"""

doc = ET.fromstring(data)
for item in doc.findall('.//H//T'):
    item.text = "modified text"
print(ET.tostring(doc).decode())

输出:

<root>
<H><A><T>modified text</T></A></H>
<H><B><T>modified text</T></B></H>
<H><C><T>modified text</T></C></H>
</root>

相关问题 更多 >