2011-03-11 5 views
1

xml 데이터를 구문 분석하는 데 lxml을 사용하고 있습니다. 여러 노드에서 xml을 나눠야하고 각 하위 트리에 데이터를 써서 파일을 구분해야합니다. lxml은 _ElementTree 클래스에 write() 메소드를 제공합니다.이 메소드는 구문 분석 트리가 나타내는 XML을 파일에 편리하게 씁니다.lxml : 트리의 주어진 요소에서 새 요소 트리를 만드는 방법

그래서 주어진 노드의 하위 트리의 루트 노드에서 tree (_ElementTree 객체)를 만들 수 있으면 write() 메소드를 쉽게 사용할 수 있습니다. 그렇게하는 방법.

답변

4
당신은 요소 및 파일에 그 내용을 기록하기 위해 새로운 ElementTree를 만들 필요가 없습니다

, 당신은 단지 etree.tostring(element)의 결과, 예를 들어 작성할 수 있습니다

from lxml import etree 

with open("whatever.xml") as fp: 
    tree = etree.parse(fp) 
    i = 0 
    for node in tree.xpath('//section'): 
     output_filename = "output-%d.xml" % (i,) 
     with open(output_filename,"w") as fp: 
      fp.write(etree.tostring(node)) 
     i += 1 
+0

당신의 솔루션은 우아합니다. 고마워 :) – Xolve

+0

그것은 etree.parse (fb, 파서)가 아니어야합니까? 그렇지 않으면 구문 분석기 변수가 더 이상 사용되지 않습니다 – kravietz

+0

@kravietz : 감사합니다. '파서'는 XML 구문 분석에 필요하지 않습니다. 그래서 그것을 제거하고 예제가 여전히 작동하는지 확인했습니다. –

5

불편을 끼쳐 드려 죄송합니다. 그 :

new_tree = etree.ElementTree(node_in_tree) 
관련 문제