[英]How do I remove a node in xml using ElementTree in Python by searching attributes of an element?
樣本xml文件:
<root>
<child1 />
<child2 bksetname="Default Backup Set" />
<child3 bksetname="Local Backup Set" />
</root>
碼:
import xml.etree.ElementTree as ET
tr = ET.parse("Scheduler.xml")
for elem in tr.iter():
print elem.tag , elem.attrib
if elem.attrib.get('bksetname') == "Default Backup Set":
elem.remove(elem.tag)
輸出:
Entering elem:
self._children.remove(element)
child2
ValueError: list.remove(x): x not in list
我試圖通過搜索文件中的元素(如果它具有我想要的屬性)來刪除該元素。我在代碼中嘗試了這種方式,並在共享時輸出錯誤。 請告訴我如何使用xml.etree.ElementTree包進行此操作。
您必須將其從要迭代的元素中刪除。 tr
是ElementTree
類型的對象。 如果要從樹中刪除某些元素,可以通過從根元素中刪除它來完成。 像這樣的東西:
import xml.etree.ElementTree as ET
tr = ET.parse("Scheduler.xml")
for elem in tr.iter():
print elem.tag , elem.attrib
if elem.attrib.get('bksetname') == "Default Backup Set":
tr.getroot().remove(elem)
# for rewriting the file:
tr.write("Scheduler.xml")
為此,您需要訪問項目的父項。 如果您確定它深一層,可以使用以下方法直接將其刪除:
tr.remove(item)
但是,如果不是這樣,則需要創建一個反向樹來訪問父級,例如describe Here ,或者可以使用功能更強大的庫,例如lxml 。
然后,您可以使用xpath
和getparent
處理該問題。
處理此查詢的正確方法是使用XPATH:
from lxml import etree
tr = etree.fromstring(open("Scheduler.xml").read())
for item in tr.xpath(//*[@bksetname="Default Backup Set"]):
item.getparent().remove(item)
模式//*[@bksetname="Default Backup Set"]
表示所有具有屬性bksetname =“默認備份集”的元素。 然后,我們要求它的父項並刪除該元素。
請提及我使用lxml代替ElementTree。
您可以使用免費的OnlineXpath測試器來檢查XPATH
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.