[英]Remove a specific xml tag with ElementTree in python
我正在尋找一種方法來刪除在xml
文件中具有mmm
值的特定標簽<e>
(即<e>mmm</e>
。我指的是這個線程作為凝視指南: How to remove elements from XML using Python不使用lxml
庫而不是使用ElementTree
和python v2.6.6
。我試圖用線程連接一個點並閱讀ElementTree api
,但我沒有成功。
感謝您對此的建議和想法。
<?xml version='1.0' encoding='UTF-8'?>
<parent>
<first>
<a>123</a>
<c>987</c>
<d>
<e>mmm</e>
<e>yyy</e>
</d>
</first>
<second>
<a>456</a>
<c>345</c>
<d>
<e>mmm</e>
<e>hhh</e>
</d>
</second>
</parent>
<e>
標簽都是<d>
的子節點。 如果我們可以假設上述所有目標節點(具有值mmm
的<e>
節點)都是正確的,則可以使用此腳本。 (我添加了一些額外的節點來檢查它是否有效
import xml.etree.ElementTree as ET
xml_string = """<?xml version='1.0' encoding='UTF-8'?>
<parent>
<first>
<a>123</a>
<c>987</c>
<d>
<e>mmm</e>
<e>aaa</e>
<e>mmm</e>
<e>yyy</e>
</d>
</first>
<second>
<a>456</a>
<c>345</c>
<d>
<e>mmm</e>
<e>hhh</e>
</d>
</second>
</parent>"""
# this is how I create my root, if you choose to do it in a different way the end of this script might not be useful
root = ET.fromstring(xml_string)
target_node_first_parent = 'd'
target_node = 'e'
target_text = 'mmm'
# find all <d> nodes
for node in root.iter(target_node_first_parent):
# find <e> subnodes of <d>
for subnode in node.iter(target_node):
if subnode.text == target_text:
node.remove(subnode)
# output the result
tree = ET.ElementTree(root)
tree.write('output.xml')
我試圖只刪除root.iter(yourtag)
找到的節點,但顯然不可能從根目錄中刪除(顯然這並不容易)
讓我知道這是否對您有所幫助,我對 XML 不太了解,如果我扼殺了任何術語,我會很高興聽到和學習!
@Queuebee 的答案完全正確,但如果您想從文件中讀取,下面的代碼提供了一種方法。
import xml.etree.ElementTree as ET
file_loc = " "
xml_tree_obj = ET.parse(file_loc)
xml_roots = xml_tree_obj.getroot()
target_node_first_parent = 'd'
target_node = 'e'
target_text = 'mmm'
# find all <d> nodes
for node in xml_roots.iter(target_node_first_parent):
# find <e> subnodes of <d>
for subnode in node.iter(target_node):
if subnode.text == target_text:
node.remove(subnode)
out_tree = ET.ElementTree(xml_roots)
out_tree.write('output.xml')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.