Python을 사용하여 XML 파일에 포함 된 텍스트를 변경하는 가장 좋은 방법은 무엇입니까?
문제
다음을 포함하는 'mydata.xml'이라는 기존 사소한 XML 파일이 있다고 가정 해 봅시다.
<?xml version="1.0" encoding="utf-8" ?>
<myElement>foo</myElement>
'foo'의 텍스트 값을 'bar'로 변경하여 다음을 만듭니다.
<?xml version="1.0" encoding="utf-8" ?>
<myElement>bar</myElement>
끝나면 변경 사항을 저장하고 싶습니다.
이 모든 것을 달성하는 가장 쉽고 간단한 방법은 무엇입니까?
해결책
파이썬을 사용하십시오 미니 돔
기본적으로 다음 단계를 수행합니다.
- XML 데이터를 DOM 객체로 읽으십시오
- DOM 메소드를 사용하여 문서를 수정하십시오
- 새로운 XML 문서에 새 DOM 객체를 저장하십시오
파이썬 사양은이 과정에서 손을 잘 고정시켜야합니다.
다른 팁
이것이 제가 기반으로 쓴 것입니다 @Ryan의 대답:
from xml.dom.minidom import parse
import os
# create a backup of original file
new_file_name = 'MyData.xml'
old_file_name = new_file_name + "~"
os.rename(new_file_name, old_file_name)
# change text value of element
doc = parse(old_file_name)
node = doc.getElementsByTagName('myElement')
node[0].firstChild.nodeValue = 'bar'
# persist changes to new file
xml_file = open(new_file_name, "w")
doc.writexml(xml_file, encoding="utf-8")
xml_file.close()
이것이 가장 쉽고 간단한 접근법인지 확실하지 않지만 작동합니다. (@Javier의 답변 코드 줄은 적지 만 비표준 라이브러리가 필요합니다)
빠르고 비 임계 XML 조작을 위해 정말 좋아합니다. P4X. 다음과 같이 쓸 수 있습니다.
import p4x
doc = p4x.P4X (open(file).read)
doc.myElement = 'bar'
Uche Ogbuji의 우수한 XML 데이터 바인딩 라이브러리 Amara를 확인할 수도 있습니다.http://uche.ogbuji.net/tech/4suite/amara
(여기 문서 :http://platea.pntic.mec.es/~jmorilla/amara/manual/)
Amara의 멋진 점은 XML 문서를 Python 객체로 바꾸므로 다음과 같은 작업을 수행 할 수 있다는 것입니다.
record = doc.xml_create_element(u'Record')
nameElem = doc.xml_create_element(u'Name', content=unicode(name))
record.xml_append(nameElem)
valueElem = doc.xml_create_element(u'Value', content=unicode(value))
record.xml_append(valueElem
(이름과 값 요소가 포함 된 레코드 요소를 생성합니다 (이름과 값 변수의 값이 포함되어 있음).
제휴하지 않습니다 StackOverflow