2010-03-18 7 views
3

기존 XML 파일 요소 값을 변경하는 방법의 예를 찾으려고합니다. 내가 DOM 사용하여 파이썬 스크립트에서 '짐 존슨'과 '존 스미스'의 저자 요소 값을 대체하고 싶었DOM을 사용하여 기존 XML 파일의 요소 값 변경

<book> 
    <title>My Book</title> 
    <author>John Smith</author> 
</book> 

이 어떻게 이렇게 가겠어요 :

다음 XML 예제를 사용하십니까? 나는 이것에 대한 예제를 찾으려고 노력했지만 그렇게하지 못했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

감사합니다, 카 프릴과 같을 것이다

s = ''' 
<book> 
    <title>My Book</title> 
    <author>John Smith</author> 
</book>''' 

DOM을 가정하면

답변

5

:

from xml.dom import minidom 

dom = minidom.parseString(s) # or parse(filename_or_file) 
for author in dom.getElementsByTagName('author'): 
    author.childNodes = [dom.createTextNode("Jane Smith")] 

하지만 ElementTree를 조사하는 것이 좋습니다 것, 그것은 XML 바람과 함께 작업하게 :

from xml.etree import ElementTree 

et = ElementTree.fromstring(s) # or parse(filename_or_file) 
for author in et.findall('author'): 
    author.text = "Jane Smith" 
+0

IT가 도와 주셔서 감사합니다. 당신이 제안한대로 ElementTree를 사용하고, 그것은 잘 작동합니다. 필자는 필요한 변경 내용을 XML 파일에 쓸 수 있습니다. 나는 파일이 기록 될 때 파일에 잠금 장치가 놓여 있음을주의했다. 파일이 아직 writting을 위해 열려 있다고 가정합니다. ElementTree를 사용하여 파일을 작성한 후 파일의 잠금을 해제하는 방법이 있습니까? – user296793

+0

@ rylic38 파일을 어떻게 작성하고 있습니까? http://pastie.org/에 코드 샘플을 붙여 넣을 수 있습니까? – Callahad

+0

pastie.org는 직장에서 유감스럽게 접근 할 수 없습니다. 여기에 추가하려고합니다 : 수입 OS XML 가져 오기 xml.etree 수입 ElementTree에서 등 등 경로 = "C : \\ TEMP \\ Books.xml을" 나무 = et.parse (경로) tree.findall ('저자)의 저자에 대한 : 나는 명령 줄에서 라인별로이 줄을 실행하면 \t author.text = "신원 미상" \t tree.write (경로) 는 XML 파일 작성 에,하지만 잠겨 있습니다. 파이썬을 종료하면 파일이 해제되고 변경 사항을 볼 수 있습니다. – user296793

관련 문제