2017-12-20 20 views
2

XML 문서를 lxml로 구문 분석하는 동안 특정 태그의 시작 및 끝 줄 번호를 찾고 싶습니다. lxml.etree.Elementsourceline 속성을 사용하여 시작 태그의 위치를 ​​찾을 수 있지만 닫는 태그의 줄 번호를 찾는 데 어려움을 겪고 있습니다.lxml에서 요소의 끝 태그의 줄 번호 찾기

내 시도의 사소한 예 :

import lxml.etree as ET 

xml_sample = b'''<?xml version="1.0" encoding="utf-8"?> 
<collection> 
    <item> 
     <value>foo</value> 
    </item> 
    <item> 
     <value> 
      bar 
     </value> 
    </item> 
</collection>''' 

for el in ET.fromstring(xml_sample).getroottree().findall('//value'): 
    print('Found value "{el.text}" starting on line {el.sourceline} ' 
      'and ending on line ???.'.format(el=el)) 

는 위의 예에서 value 요소의 닫는 태그 라인 번호를 얻을 수 있습니까? xml.etree.ElementTree.tostring() 트릭으로

답변

3

:

... 
root = ET.fromstring(xml_sample) 
for el in root.findall('.//value'): 
    endline_num = el.sourceline + (len(ET.tostring(el).strip().split()) - 1) 
    print('Found value "{el.text}" starting on line {el.sourceline} ' 
      'and ending on line {end_num}.'.format(el=el, end_num=endline_num)) 

출력 :

Found value "foo" starting on line 4 and ending on line 4. 
Found value " 
      bar 
     " starting on line 7 and ending on line 9. 
+0

깔끔한, 감사합니다! – Naglis