2017-04-24 3 views
1

Ich habe versucht, XML mit verschiedenen Python3-Module und verschiedene Artikel aus dem Internet zu analysieren, aber nicht erfolgreich.Python3 parse xml

Ich habe diese XML:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:cwmp="urn:dslforum-org:cwmp-1-0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Header/> 
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 

<cwmp:GetParameterValuesResponse> 
    <ParameterList SOAP-ENC:arrayType="cwmp:ParameterValueStruct[3]"> 
     <ParameterValueStruct> 
      <Name>SOME_NAME_1_HERE</Name> 
      <Value>2</Value> 
     </ParameterValueStruct> 
     <ParameterValueStruct> 
      <Name>SOME_NAME_2_HERE</Name> 
      <Value>180</Value> 
     </ParameterValueStruct> 
     <ParameterValueStruct> 
      <Name>SOME_NAME_3_HERE</Name> 
      <Value>1800</Value> 
     </ParameterValueStruct> 
    </ParameterList> 
</cwmp:GetParameterValuesResponse> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Ich muss die Daten aus XML-Tags nehmen: Name und Wert sollte es sein, so etwas wie:

SOME_NAME_1_HERE 2 
SOME_NAME_2_HERE 180 
SOME_NAME_3_HERE 1800 

, wie ich diese Werte erhalten können Python3 mit (Wird es gut sein, Python-Standardmodule zu verwenden - nicht bs4)?

Dank

Antwort

1

xml.etree Verwenden Sie .//element_name einfache XPath-Ausdruck ausführen kann Element überall in einem bestimmten Kontext Element zu finden:

from xml.etree import ElementTree as ET 
tree = ET.parse('path_to_your_xml.xml') 
root = tree.getroot() 

for p in root.findall('.//ParameterValueStruct'): 
    print("%s | %s" % (p.find('Name').text, p.find('Value').text)) 
+0

Vielen Dank, Ihr Code funktioniert. Aber mit einigen Änderungen in PRINT. –

0

Sie können so etwas wie dies versuchen:

import xml.etree.ElementTree 
e = xml.etree.ElementTree.parse('Newfile.xml').getroot() 

print(e) 
for atype in e.findall('.//ParameterValueStruct'): 
    print("%s | %s" % (atype.find('Name').text, atype.find('Value').text)) 
+0

Danke, aber dein Code druckt nichts. '/usr/bin/python3.5 /home/ppikh/Desktop/test.py Prozess mit Exit-Code beendet 0' –

+0

' e.findall ('.// ParameterValueStruct') ' – har07

+0

@ har07 In Ihrem Fall Ich erhielt: Keine für jeden Druck –