2017-02-11 5 views
2

3 번째 Python과 ElementTree API를 사용하고 있습니다. 나는 위해 주어진 항목에 대한 텍스트와 자식 노드를 반복 할 수 있도록하려면Python ElementTree - 순서대로 자식 노드와 텍스트를 반복합니다.

<root> 
    <item>Over the <ref id="river" /> and through the <ref id="woods" />.</item> 
    <item>To Grandmother's <ref id="house" /> we go.</item> 
</root> 

: 나는 양식의 일부 XML이있다. 첫 번째 항목에서 줄 단위로 인쇄 할 목록은 다음과 같습니다.

Over the 
<Element 'ref' at 0x######> 
and through the 
<Element 'ref' at 0x######> 
. 

그러나 ElementTree를 사용하여이 작업을 수행하는 방법을 알 수 없습니다. itertext()을 통해 텍스트를 순서대로 가져올 수 있으며 여러 가지 방법으로 순서대로 하위 요소를 순서대로 인터리브 할 수는 없습니다. ./@text|./ref과 같은 XPath 표현식을 사용할 수 있기를 기대했지만 ElementTree의 XPath 하위 집합이 속성 선택을 지원하지 않는 것 같습니다. 각 항목 노드의 원본 xml 내용을 가져올 수도있는 경우 필요한 경우 직접 구문 분석 할 수 있습니다.

+0

어떻게 최종 출력을보아야합니까? – RomanPerekhrest

+0

출력은 위에 명시되어 있습니다. – xdhmoore

답변

3

이 시도 : "혼합 된 내용"의

from xml.etree import ElementTree as ET 

xml = """<root> 
    <item>Over the <ref id="river" /> and through the <ref id="woods" />.</item> 
    <item>To Grandmother's <ref id="house" /> we go.</item> 
</root>""" 

root = ET.fromstring(xml) 

for item in root: 
    if item.text: 
     print(item.text) 
    for ref in item: 
     print(ref) 
     if ref.tail: 
      print(ref.tail) 

ElementTree의 표현은 .text.tail 속성을 기반으로합니다. 요소의 .text은 첫 번째 하위 요소까지 요소의 텍스트를 나타냅니다. 그 어린이의 .tail은 그 다음에 부모의 텍스트를 포함합니다. API doc을 참조하십시오.