찾을 수있는만큼 많은 관련 게시물을 읽었지만 그 중 누구도 도움을받지 못했습니다. 나는 간단한 XML 파일을 가지고 있는데, 새로운 요소 (look_1)를 다른 요소 (Looks)의 자식으로 추가해야한다.python elementTree, 구문 분석 된 xml 파일에 새 요소를 추가해도 아무런 영향이 없습니다.
이AssetRoot
info_Materials
Looks/
/info_Materials
/AssetRoot
목표는이를 생산하는 것입니다 : 나는 XML 트리가 다음과 같이 보입니다 그래서 여기서 일하고 서식 얻이 수없는 것
AssetRoot
info_Materials
Looks
look_1
(additional elements from a future script)
/look_1
/Looks
/info_Materials
/AssetRoot
나는 나던 다음 스크립트를 가지고 오류를 던지지만 파일에 아무 것도하지 않는 것 같습니다.
def editXML(filename):
print 'editing xml file...'
tree = xml.parse(filename)
root = tree.getroot()
looks = root.findall('.//Looks')
print looks
look_1 = xml.Element('Look_1')
look_1.text = 'foobar'
looks.append(look_1)
with open(filename, 'w') as fn:
print 'writing xml file...'
tree.write(fn)
print 'file write successful'
if __name__ == '__main__':
editXML(assetInfo)
나는 외모 = root.findall 내가 '보이는'인쇄하는 경우 올바른 요소를 발견 ('.//이 보이는') 확인할 수 있습니다. 올바르게 이해하면 element.findall()의 결과는 요소를 가리 키지 않고 요소의 값을 가리 킵니까? 그렇다면 실제 요소를 어떻게 처리하여 조작 할 수 있습니까? 'look_1'을 'look'이 아닌 'root'에 추가하면 어떻게 작동합니까? 내 질문은 중첩 된 하위 요소에 새 요소를 추가하는 방법입니다.
lxml을 사용하면 매우 간단 할 것입니다. 오히려 추가적인 의존성을 포함하지 않아도됩니다.
편집 : 좀 다시 쓰기를하고있는 일을 다음 사람이 더 나은 솔루션이있는 경우
가def editXML(filename):
print 'editing xml file...'
tree = xml.ElementTree(file=filename)
root = tree.getroot()
looks = root[2][1]
look_1 = xml.Element('Look_1')
look_1.text = 'foobar'
looks.append(look_1)
with open(filename, 'w') as fn:
print 'writing xml file...'
tree.write(fn)
print 'file write successful'
if __name__ == '__main__':
editXML(assetInfo)
그것의 아마하지 가장 우아한 해결책하지만, 내 목적을 위해 일해야하는 것은 내가 관심이있을 것 알기. 감사.
'findall '에 대한 문서에서 목록을 반환한다고 말합니다 ....'looks [0] .append (look_1)'과 같은 것을해야합니까? – user