Använda XML på Raspberry Pi med Python (2 / 3 steg)
Steg 2: Parsing XML med Python
Vad menar vi med tolkning?
Analysen avser syntaktiska analysen av XML-indata i sina beståndsdelar för att underlätta kör kod baserat på resultatet av analysen. Med andra ord, läser programmet"" XML för att hitta värden som det är ute efter, att uppmärksamma korrekt syntax och form. XML-syntaxen innehåller en kapslad hierarki av element. Detta innebär att varje nivå i hierarkin ingår som en sluten undergrupp till tidigare nivå. I vårt exempel nedan, varje objekt är helt inbyggt ("kapslade") i den. Du kan utöka detta häckande så långt ner som du vill. När du skriver parsning kod här häckar oftast resulterar i för loopar i Python iterera genom alla objekt på en nivå i hierarkin.
Alternativ för parsning av XML i Python
Det finns många olika paket för parsning av XML i Python. Vi kommer att använda xml.etree.ElementTree. ElementTree är en enkel att använda, snabb XML-trädet bibliotek inbyggd i Python. Det är något begränsade i funktioner, men för enkel XML-meddelande parsning det är svårt att slå.
Vad behöver du veta om ElementTree? Mycket få kommandon behövs för att tolka enkla XML. Dessa par kommer att illustreras nedan.
Python exempelkod
importera xml.etree.ElementTree som ET
incomingXML = "" "
< XMLObjectXMLRequests >
< XMLCOMMAND >
< OBJECTSERVERID > W-1 < / OBJECTSERVERID >
< OBJEKTNAMN > StatusWebView < / OBJEKTNAMN >
< OBJEKTTYP > 1 < / OBJECTTYPE >
< OBJECTID > 7 < / OBJECTID >
< / XMLCOMMAND >
< XMLCOMMAND >
< OBJECTSERVERID > M-2 < / OBJECTSERVERID >
Processer som < OBJEKTNAMN > < / OBJEKTNAMN >
< OBJEKTTYP > 64 < / OBJECTTYPE >
< OBJECTID > 0 < / OBJECTID >
< / XMLCOMMAND >
< / XMLObjectXMLRequests > "" "
rot = ET.fromstring(incomingXML)
skriva ut incomingXML
# iterera genom alla värden
för element i
root.findAll('XMLCOMMAND'):
skriva ut "XMLCOMMAND"
skriva ut ' OBJECTNAME:', \
element.find('OBJECTNAME').text
skriva ut "OBJECTTYPE:', \
element.find('OBJECTTYPE').text
skriva ut ' OBJECTSERVERID:', \
element.find('OBJECTSERVERID').text
skriva ut "OBJECTID:', \
element.find('OBJECTID').text
Setup ElementTree data
Efter import av ElementTree koden och skriva XML-data till en sträng (Obs: du kan läser detta från en fil eller en webbegäran), vi först ställa in roten av XML-hierarkin. Roten till den här XML-koden är.
Gå igenom listan
Vi vet från att titta på XML-filen, som består av ett antal objekt. Vi använder en for-loop att göra detta (varje element inuti roten är ett objekt) med ElementTree kommandot findall (hitta alla XMLCOMMAND objekt i det här fallet).
Tolka de enskilda artiklarna
I inre av den for-loop, vi nu tolka individuella element i objektet. Här använder vi kommandot ElementTree element med textattributet. Observera att elementen inte i samma ordning! XML bryr sig inte om element på samma nivå i någon särskild ordning. Dessutom är det inte garanterat att det första elementet kommer att vara den första en Hämtad av ElementTree.
Beräknade element kan vara saknade från föremål. När det gäller saknas element i Python (med ElementTree) du absolut måste använda en if uttalande att ta itu med de saknade element. Om du
sedan riskerar du inte orsakar en Python undantag när på det returnerade värdet som ElementTree returnerar en ingen och inte ett giltigt värde. Om du använder strängar som värden, du kommer antagligen att ställa in din strängvariabel till en "" (tom sträng) snarare än att låta den till vara sätta till en Python ingen. Detta är ett mycket vanligt misstag skriftligen ElementTree kod.
om (element.find('XXXX').text == ingen):
#do något
Användningsområden för XML i Python program
XML används i stor utsträckning inom mjukvaruindustrin, alltifrån HL7 meddelanden inom vården, SOAP Simple Object Access Protocol () för klient-server informationsutbyte, och även XML används i Microsoft Word-filer. De viktigaste fördelarna med att använda XML är systemanvändning, läsbarhet, utbyggbarhet och möjligheten att redigera XML-filen i en textredigerare.
Programmerare använda ofta XML kan läsa och skriva konfigurationsfiler till disk, fortkörning felsökning och utveckling. Detta gör det lättare att starta testpaket för program som du kan läsa samma XML-strukturer från disken som du vill skicka via Internet i en webbegäran. Utbyggbarheten för XML kan du lägga till nya parametrar och strukturer i Python program medan att hantera bakåtkompatibiliteten. Del tre av denna serie kommer att visa hur detta görs i Python.
Slutsats
XML är ordrik och därigenom använder en hel del diskutrymme för att lagra och minne för att bearbeta. I världens Raspberry Pi och över Internet spelar detta allmänt ingen roll. I till exempel Arduino microcontrollers är RAM minnesutrymme dock en premie, så ett mer "tät" och enkla protokoll som JSON är lämpligare. Om diskutrymmet är en premie, kommer att XML komprimera mycket väl på grund av alla dubblering av nyckelord och beskrivningar.
XML är lätt att läsa, analysera och felsöka för nybörjare och erfarna programmerare lika.