파이썬 XML 파싱

파이썬 XML 파싱

XML 파일에서 특정 태그를 삭제해야 합니다. 아래 샘플 XML.

       <data>
          <tag:action/>
        </data>

data와 /data 사이의 내용을 모두 삭제하고 싶습니다. 게시 후 질문에 XML 태그가 표시되지 않습니다.

Python ElementTree xml 파서에서 제거() 메서드를 사용하면 이 작업을 수행할 수 있습니다. 요소를 삭제한 후 수정된 내용을 새 항목에 쓰고 있습니다.

tree.write('new.xml');

문제는 원본 xml 파일의 모든 태그 이름이 로 바뀌는 등의 방식으로 에서 변경된다는 ns0ns1입니다 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>

관련 정보