XML 파일에서 특정 태그를 삭제해야 합니다. 아래 샘플 XML.
<data>
<tag:action/>
</data>
data와 /data 사이의 내용을 모두 삭제하고 싶습니다. 게시 후 질문에 XML 태그가 표시되지 않습니다.
Python ElementTree xml 파서에서 제거() 메서드를 사용하면 이 작업을 수행할 수 있습니다. 요소를 삭제한 후 수정된 내용을 새 항목에 쓰고 있습니다.
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>