我必須從 xml 檔案中刪除特定標籤。下面的範例 xml。
<data>
<tag:action/>
</data>
我想刪除data和/data之間的所有內容。發布後,XML 標籤不會顯示在問題中。
我可以透過使用Python ElementTree xml解析器中的remove()方法來做到這一點。我在刪除元素後將修改後的內容寫入新的內容。
tree.write('new.xml');
問題在於,原來的xml檔案中的所有標籤名稱都被重新命名為ns0
,ns1
依此類推new.xml
。
有沒有什麼方法可以修改 XML 文件,同時保持所有其他內容不變?
答案1
你可以使用漂亮的湯來完成這項工作:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import bs4
content = '''
<people>
<person born="1975">
<name>
<first_name>John</first_name>
<last_name>Doe</last_name>
</name>
<profession>computer scientist</profession>
<homepage href="http://www.example.com/johndoe"/>
</person>
<person born="1977">
<name>
<first_name>Jane</first_name>
<last_name>Doe</last_name>
</name>
<profession>computer scientist</profession>
<homepage href="http://www.example.com/janedoe"/>
</person>
</people>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(content)
for s in soup('name'):
s.extract()
print(soup)
它產生以下結果:
<html><body><people>
<person born="1975">
<profession>computer scientist</profession>
<homepage href="http://www.example.com/johndoe"></homepage>
</person>
<person born="1977">
<profession>computer scientist</profession>
<homepage href="http://www.example.com/janedoe"></homepage>
</person>
</people>
</body></html>
使用命名空間:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import bs4
content = '''<people xmlns:h="http://www.example.com/to/">
<h:person born="1975">
<h:name>
<h:first_name>John</h:first_name>
<h:last_name>Doe</h:last_name>
</h:name>
<h:profession>computer scientist</h:profession>
<h:homepage href="http://www.example.com/johndoe"/>
</h:person>
<h:person born="1977">
<h:name>
<h:first_name>Jane</h:first_name>
<h:last_name>Doe</h:last_name>
</h:name>
<h:profession>computer scientist</h:profession>
<h:homepage href="http://www.example.com/janedoe"/>
</h:person>
</people>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(content).people
for s in soup('h:name'):
s.extract()
print(soup)
我在結果中添加了.people
阻止。<html><body>
</body></html>
<people xmlns:h="http://www.example.com/to/">
<h:person born="1975">
<h:profession>computer scientist</h:profession>
<h:homepage href="http://www.example.com/johndoe"></h:homepage>
</h:person>
<h:person born="1977">
<h:profession>computer scientist</h:profession>
<h:homepage href="http://www.example.com/janedoe"></h:homepage>
</h:person>
</people>