Paso 2: Análisis de XML con Python
¿Qué entendemos por análisis?
Análisis se refiere al análisis sintáctico de la entrada XML en sus componentes para facilitar la ejecución código basado en el resultado del análisis. En otras palabras, el programa está "leyendo" el XML para obtener los valores que busca, prestando atención a la sintaxis correcta y la forma. Sintaxis XML incluyen una jerarquía anidada de elementos. Esto significa que cada nivel de la jerarquía está incluido como un subconjunto completamente incluido del nivel anterior. En nuestro siguiente ejemplo, cada objeto es completamente cerrado ("nested") en el. Puede ampliar esta hasta abajo como usted tiene gusto de anidación. Cuando usted escriba análisis código este anidamiento generalmente resultado de lazos en Python iteración todos los objetos en un nivel en la jerarquía.
Opciones para parsear XML en Python
Hay muchos diferentes paquetes para parsear XML en Python. Vamos a usar xml.etree.ElementTree. ElementTree es un fácil de usar, rápido biblioteca de árbol XML construido en Python. Es algo limitado en funciones, pero para XML sencillo mensaje lo análisis es difícil de superar.
¿Lo que necesita saber sobre ElementTree? Muy pocos comandos se necesitan para analizar XML simple. Estos pocos se ilustra a continuación.
Código de ejemplo de Python
import xml.etree.ElementTree as ET
incomingXML = """ <XMLObjectXMLRequests>
<XMLCOMMAND> <OBJECTSERVERID>W-1</OBJECTSERVERID> <OBJECTNAME>StatusWebView</OBJECTNAME> <OBJECTTYPE>1</OBJECTTYPE> <OBJECTID>7</OBJECTID>
</XMLCOMMAND> <XMLCOMMAND>
<OBJECTSERVERID>M-2</OBJECTSERVERID> <OBJECTNAME>Processes</OBJECTNAME> <OBJECTTYPE>64</OBJECTTYPE> <OBJECTID>0</OBJECTID>
</XMLCOMMAND>
</XMLObjectXMLRequests>"""
root = ET.fromstring(incomingXML) print incomingXML
# iterate through all the values for element in root.findall('XMLCOMMAND'):
print 'XMLCOMMAND' print 'OBJECTNAME:',\
element.find('OBJECTNAME').text print 'OBJECTTYPE:',\
element.find('OBJECTTYPE').text print 'OBJECTSERVERID:',\
element.find('OBJECTSERVERID').text print 'OBJECTID:',\
element.find('OBJECTID').text
Configurar los datos ElementTree
Después de la importación del código ElementTree y escribir el XML en una cadena (Nota: usted podría estar leyendo esto desde un archivo o una petición web), hemos creado primero la raíz de la jerarquía XML. Es la raíz de este código XML.
Recorra en iteración la lista
Sabemos buscar en el archivo XML, que consta de una serie de objetos. Usamos un bucle hacerlo (cada elemento dentro de la raíz es un objeto) usando el ElementTree comando findall (encontrar todos los objetos XMLCOMMAND en este caso).
Analizar los elementos individuales
En el interior del bucle, ahora analizar los elementos individuales del objeto. Aquí utilizamos el comando de elemento ElementTree con el atributo de texto. Tenga en cuenta que los elementos no están en el mismo orden! XML no importa si los elementos en el mismo nivel están en ningún orden en particular. Además, no se garantiza que el primer elemento será el primero obtenido por ElementTree.
Elementos que pueden ser faltantes de objetos. En el caso de elementos que faltan en Python (usando ElementTree) es absolutamente necesario utilizar un if instrucción para lidiar con el elemento que falta. Si usted
no entonces corres el riesgo que causa una excepción Python cuando opere en el valor devuelto como ElementTree devuelve un ninguno y no un valor válido. Si está utilizando cadenas como valores, probablemente tendrá que establecer la variable de cadena un "" (cadena vacía) en lugar de lo que le permite ajustarse a una Python ninguno. Esto es un error muy común en la escritura de código ElementTree.
if (element.find('XXXX').text == None): #do something
Usos de XML en los programas de Python
Se utiliza extensivamente en la industria del software, que van desde mensajes de HL7 en Healthcare, SOAP Simple Object Access protocolo () para el intercambio de información cliente-servidor, XML y XML incluso se utiliza en archivos de Microsoft Word. Las principales ventajas de utilizar XML son Cruz sistema de uso, legibilidad, capacidad de ampliación y la posibilidad de editar el XML en un editor de texto.
Programadores a menudo usan XML para leer y escribir archivos de configuración en el disco, exceso de velocidad de depuración y desarrollo. Esto hace más fácil de configurar conjuntos de pruebas para programas como se pueden leer las mismas estructuras XML desde el disco como te enviaria a través de Internet en una solicitud web. La expansibilidad de XML le permite añadir nuevos parámetros y estructuras en sus programas de Python, mientras que mantiene la compatibilidad hacia atrás. Parte tres de esta serie mostrará cómo se hace en Python.
Conclusión
XML es verboso y como resultado, utiliza un poco de espacio en disco para almacenar y memoria para procesar. En el mundo de frambuesa Pi y a través de Internet generalmente no importa esto. Sin embargo, en microcontroladores como el Arduino, espacio de memoria RAM es una prima, tan un protocolo más simple y "denso" como JSON es más apropiado. Si el espacio de disco es una prima, XML se comprimirá muy bien debido a la de la reproducción de palabras clave y descripciones.
XML es fácil de leer, analizar y depurar para principiantes y programadores experimentados por igual.