簡體   English   中英

我們可以在 xml 中使用 etree findall() 搜索多個模式嗎?

[英]can we search multiple pattern using etree findall() in xml?

對於我的情況,我必須在 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 到 select 多個標簽,但它不適用於我的情況

更新:也許 findall() 中的正則表達式?

您問題中的 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())

Output:

<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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM