2017-09-27 2 views
0

찾을 수있는만큼 많은 관련 게시물을 읽었지만 그 중 누구도 도움을받지 못했습니다. 나는 간단한 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) 

그것의 아마하지 가장 우아한 해결책하지만, 내 목적을 위해 일해야하는 것은 내가 관심이있을 것 알기. 감사.

+2

'findall '에 대한 문서에서 목록을 반환한다고 말합니다 ....'looks [0] .append (look_1)'과 같은 것을해야합니까? – user

답변

0

스레드를 닫으려면 답장으로 표시하겠습니다. 편집에서 설명한 것처럼 이것이 내가 생각해 낸 해결책이었습니다.

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)