2015-11-14 4 views
1

Я новичок в Python & XPATH и вам нужно прочитать XML с неравномерными узлами (аналогично тому, как описано ниже) с помощью XPATH. Формат вывода, который будет записан в файл, также показан ниже. В коде используется библиотека lxml.Чтение сложного XML с XPATH

Пожалуйста, помогите мне создать правильный XPATH.

Источник XML

<Classes> 
    <German> 
     <Student> 
      <Span><a href="">John</a></Span> 
     </Student> 
     <Student> 
      <Span>Adam</Span> 
     </Student> 
    </German> 
    <English> 
     <Student> 
      <Span>Mary</Span> 
     </Student> 
    </English> 
    <French> 
     <Student> 
      <Span><a href="">Anil</a></Span> 
     </Student> 
     <Student> 
      <Span><a href="">Jack</a></Span> 
     </Student> 
    </French> 
    <Spanish> 
     <Student> 
      <Span>Mary</Span> 
     </Student> 
     <Student> 
      <Span>Jack</Span> 
     </Student> 
    </Spanish> 
</Classes> 

Ожидаемый результат

German 
    John 
    Adam 
English 
    Mary 
French 
    Anil 
    Jack 
Spanish 
    Mary 
    Jack 

Спасибо, Нихилу

+2

Что вы пробовали до сих пор, и что именно проблема с ним - как делает вывод, что вы получаете в настоящее время отличаются от того, что вы ожидали? –

ответ

0

Этот код поможет:

from lxml import html 

xml_content = """<Classes> 
    <German> 
     <Student> 
      <Span><a href="">John</a></Span> 
     </Student> 
     <Student> 
      <Span>Adam</Span> 
     </Student> 
    </German> 
    <English> 
     <Student> 
      <Span>Mary</Span> 
     </Student> 
    </English> 
    <French> 
     <Student> 
      <Span><a href="">Anil</a></Span> 
     </Student> 
     <Student> 
      <Span><a href="">Jack</a></Span> 
     </Student> 
    </French> 
    <Spanish> 
     <Student> 
      <Span>Mary</Span> 
     </Student> 
     <Student> 
      <Span>Jack</Span> 
     </Student> 
    </Spanish> 
</Classes>""" 

tree = html.fromstring(xml_content) 
classes = tree.xpath('//classes/*') 
for language_class in classes: 
    print language_class.tag.capitalize() 
    for student in language_class.xpath('.//student/span//text()'): 
     print " {}".format(student) 

Выход:

German 
    John 
    Adam 
English 
    Mary 
French 
    Anil 
    Jack 
Spanish 
    Mary 
    Jack 
+0

Спасибо Andres – Nikhil

+0

@Nikhil мое удовольствие. Я рад, что мой ответ помог. –

Смежные вопросы