2013-08-12 2 views
0

Я пытаюсь получить значение тега из нескольких идентичных тегов, кроме одного, которое я хочу игнорировать. Вот XML:получить несколько значений тегов, за исключением одного

<?xml version="1.0" encoding="UTF-8"?> 
<package xmlns="http://apple.com/itunes/importer" version="film5.1"> 
    <provider>studiocanal</provider> 
    <language>en-GB</language> 
    <video> 
     <crew> 
      <crew_member billing="top"> 
       <display_name>John Doe</display_name> 
       <roles> 
        <role>Director</role> 
        <role>Screenwriter</role> 
       </roles> 
      </crew_member> 
      <crew_member billing="ordered"> 
       <display_name>Harry Smith</display_name> 
       <roles> 
        <role>Screenwriter</role> 
       </roles> 
      </crew_member> 
      <crew_member billing="ordered"> 
       <display_name>Jane Doe</display_name> 
       <roles> 
        <role>Screenwriter</role> 
       </roles> 
      </crew_member> 
      <crew_member billing="ordered"> 
       <display_name>Mr. Kimbley</display_name> 
       <roles> 
        <role>Producer</role> 
       </roles> 
      </crew_member> 
     </crew> 
    </video> 
</package> 

Мне нужно получить значение не обращая внимания на 2-ую и поместить его в списке, я только хочу, чтобы получить первое значение из секции John Doe. Кажется, я не могу заставить его работать. Это мой текущий код, который создает и заполняет список, но у меня есть 5 ролей, но хочу только 4, пропустив второй. Heres мой текущий код:

from lxml import etree 
tree = etree.fromstring(templateXml) 
crewList2 = [] 
for element in root.xpath('//video/crew/crew_member/roles/role'): 
    crewList2.append(element) 

ответ

1

Я бы с:

crewList2 = [] 
for element in tree.xpath('//video/crew/crew_member/roles'): 
    role = element.xpath('.//role[1]') 
    if role: 
     crewList2.append(role[0].text) 

print crewList2 

принтами:

['Director', 'Screenwriter', 'Screenwriter', 'Producer'] 
+0

Я пытаюсь применить вышеуказанное код, но он передается, если роль: так что crewList2.append (role [0] .text) никогда не будет выполнен. – speedyrazor

+0

Вы уверены, что ваш код работал и печатал список 5-линов? – alecxe

+0

извините, моя ошибка, приветствия. – speedyrazor

0

Alternative с помощью одного выражения XPath, регистрация имен и lxml.etree.tostring(..., method="text"):

roles = tree.xpath('//it:video/it:crew/it:crew_member/it:roles/it:role[1]', namespaces={"it": "http://apple.com/itunes/importer"}) 
crewList2 = [etree.tostring(e, method="text", encoding=unicode).strip() for e in roles] 
Смежные вопросы