Stap 3: Een XML-toepassing in Python
De applicatie - RasPiConnect (www.milocreek.com)
Wat is XML wordt gebruikt voor in dit programma?
XML wordt gebruikt om drie redenen in dit programma. 1) voor het communicatiekanaal (via HTTP) vanuit de App naar de Raspberry Pi. 2) voor het communicatiekanaal van de Raspberry Pi aan de App (via HTTP) en 3) voor blijvende programma en scherm configuratie opslag in de App.
De kanalen van de communicatie
De Client communiceert met de Server door het verzenden en ontvangen van HTTP. De Objective C-code op het Apple iOS apparaat voor het verzenden en ontvangen valt buiten het bestek van dit artikel. De Python code op de Server voor het ontvangen en verzenden van XML-code is zeer ongecompliceerd. In de Server gebruiken we de web.py-bibliotheek van webpy.org. Dit is een lichtgewicht webserver programma beschikbaar door de volgende opdracht uit te voeren op je Raspberry Pi.
sudo apt-get install python-webpy
Er is een bi-directioneel communicatiekanaal tussen de Server en de Client. Beide richtingen worden afgehandeld door HTTP-verzoeken. De Client stuurt verzoeken om gegevens en de actie met alle verzoeken gegroepeerd. Het XML-bestand van de Client naar de Server verzonden ziet er zo uit:
< XMLObjectXMLRequests > <XMLObjectXMLRequests> <XMLCOMMAND>
<OBJECTSERVERID>LT-1</OBJECTSERVERID> <OBJECTNAME>CPU Text and Label </OBJECTNAME> <OBJECTTYPE>1</OBJECTTYPE>
... ... </XMLCOMMAND>
... ... </XMLCOMMAND>
</XMLObjectXMLRequests>
Deze XML bevat meerdere aanvragen naar de Server voor het ophalen van informatie en actie-aanvragen naar de Server te verzenden. Opmerking de meerdere entiteiten in de structuur.
De terugkerende XML van de Client kijkt zeer gelijkaardig.
< XMLRESPONSES > <XMLRESPONSES> <XMLCOMMAND>
... ... </XMLCOMMAND> <XMLCOMMAND>
<OBJECTSERVERID>LT-1</OBJECTSERVERID> <RESPONSE>
<![CDATA[43.31, 43.31, CPU Temp (deg C)]]>
... ... </XMLCOMMAND>
</XMLRESPONSES>
De XML parsing
Deze XML parseren in de afzonderlijke entiteiten (boven), is een eenvoudig gebruik van de ElementTree Python bibliotheek zoals eerder aangegeven in deel twee van dit artikel. Zodra de verzoeken zijn geparseerd en gevalideerd, voert de server de aanvragen een tegelijk, terwijl de bouw van een nieuwe XML-structuur met de antwoorden op de opdrachten. De structuur wordt vervolgens verzonden naar de Client met behulp van een HTTP-verbinding in plaats van meerdere verbindingen.
... class RasPi:
def POST(self): web.header('Content-Type',
'text/html') incomingXML = web.data()
root = ET.fromstring(incomingXML) # iterate through all the values for element in
root.findall('XMLCOMMAND'): ...
Bouwen van XML te verzenden naar de cliënt
Gebouw de XML naar terug via de HTTP-aanvraag van de Client naar de Server worden verzonden wordt gedaan door de bouw van een reeks van aaneengeschakelde XML-opdrachten en vervolgens de tekenreeks te retourneren als onderdeel van de web.py HTTP POST-aanvraag.
# start of building the XML responses outgoingData="<XMLRESPONSES>"
... outgoingData +="<XMLCOMMAND>"
... outgoingData +="</OBJECTTYPE>" outgoingData +="<OBJECTID>" outgoingData += "%i" % objectID outgoingData +="</OBJECTID>" # done with FOR loop
outgoingData+="</XMLRESPONSES>" return outgoingData
Ontvangen en verzenden van het XML-bestand
In web.py, wordt de inkomende XML geplaatst in een tekenreeks als hierboven en vervolgens geparseerd. De reacties worden teruggestuurd naar de client van de POST-functie door het retourneren van een string.
Conclusie
XML is een zeer nuttig middel voor het opslaan en overbrengen van gegevens over uiteenlopende computersystemen. Het is bruikbaar door zowel grote en kleine computers. Meer informatie over het gebruik van XML op een Python gebaseerd platform proberen de volgende websites:
http://docs.python.org/2/library/XML.etree.elementtree.html
http://Eli.thegreenplace.net/201 2/03/1 5/verwerking-xml-in-python-met-elementtree
en een tutorial video op elementtree: http://www.youtube.com/watch?v=LNYoFo1 sdwg
Meer XML-informatie, coole projecten en blogs op www.switchdoc.com