Necesito comprobar si existe cierta etiqueta en un archivo xml.Python Lxml (objectify): Comprobando si existe una etiqueta
Por ejemplo, quiero ver si existe la etiqueta en este fragmento:
<main>
<elem1/>
<elem2>Hi</elem2>
<elem3/>
...
</main>
Actualmente, estoy usando un truco feo, con la comprobación de errores, así:
try:
if root.elem1.tag:
foo = elem1
except AttributeError:
foo = "error finding elem1"
también desea personalizar la cadena si no puede encontrar el nodo (es decir, "no se puede encontrar -tagname-").
Tengo que verificar una larga lista de variables, y no quiero repetir el código 100 veces.
¿Alguna sugerencia?
Editar:
Aquí está un recorte del archivo XML real:
<main>
<asset name="Virtual Dvaered Unpresence">
<virtual/>
<presence>
<faction>Dvaered</faction>
<value>-1000.000000</value>
<range>0</range>
</presence>
</asset>
<asset name="Virtual Empire Small">
<virtual/>
<presence>
<faction>Empire</faction>
<value>100.000000</value>
<range>2</range>
</presence>
</asset>
</main>
Quiero comprobar si existe o no la etiqueta, y si es así, para obtener el contenido.
Editar edición: Bien, voy a combinar dos de las respuestas, pero solo puedo votar por una. Lo siento.
Datos 3: pregunta sobre XPath aquí: Python lxml (objectify): Xpath troubles
¿Qué pasa si el nodo no existe? ¿Da un error, o simplemente un valor en blanco? – Biosci3c
@ Biosci3c ese ejemplo específico da un error, debido al '[0]' tratando de eliminar la referencia del primer valor devuelto por la llamada 'xpath'. Si comprobó si la lista estaba vacía antes de eliminar la referencia, por el contrario, tendría una prueba sin error. Con esa corrección hecho, por cierto, creo que esta es la respuesta de mejores prácticas entre las dadas. –
Ok, me gusta la sugerencia de XPATH, así que la usaré también. Por cierto, creo que te falta un paréntesis de cierre al final de la parte superior línea – Biosci3c