2017-09-06 1 views
0

J'essaie d'analyser des éléments XML en fonction de certains attributs XML. Mon fichier XML est:Recherche d'attributs XML pour analyser des éléments XML

<?xml version="1.0" encoding="utf-8"?> 
<products updated="9/1/2017"> 
    <product name="o365"> 
    <addresslist type="IPv6"> 
     <address>2603:1020:200::682f:a1d8/128</address> 
     <address>2603:1020:201::3c4/128</address> 
     <address>2603:1030:603::6a/128</address> 
     <address>2603:1030:603::72/128</address> 

Je ne peux pas obtenir mon code de travail, mais je suppose qu'il ya une meilleure façon d'aborder ce sujet. Je veux obtenir tous adresse éléments si le nom du produit = "O365" et le addresslist est "type =" IPv6" Mon code est:.

tree = ET.fromstring(r.text) 

for node in tree.iter('product'): 
    list = node.attrib.get('addresslist') 
    address = node.attrib.get('address') 
    if list and address: 
     print ' %s :: %s' % (list, address) 
    else: 
     print name 
+0

utilisez-vous le haut-elementtree, ou avez-vous lxml installé aussi? – Tomalak

Répondre

0

cela fonctionne pour moi:

import xml.etree.ElementTree as ET 

tree = ET.parse('1.xml') 

for x in tree.iter('product'): 
if x.attrib.get('name') == 'o365': 
    for y in tree.iter('addresslist'): 
     if y.attrib.get('type') == 'IPv6': 
      for z in tree.iter('address'): 
       print z.text 

avec sortie suivante:

2603:1020:200::682f:a1d8/128 
2603:1020:201::3c4/128 
2603:1030:603::6a/128 
2603:1030:603::72/128 
+0

Voici donc l'URL complète que je suis en train d'analyser: https://support.content.office.net/en-us/static/O365IPAddresses.xml. Lorsque je cours votre code, il montre plus d'entrées que juste cette section IPv6? (Ce que je ne m'attendrais pas à ça) – EthanB