XPath: seleccionar etiqueta con valor vacío

¿Cómo puedo encontrar en XPath 1.0 todas las filas con el col name="POW" vacío col name="POW" ?

  02    DOLNOŚLĄSKIE województwo 2011-01-01  

Probé muchas soluciones. Pocas veces en la selección de XPath Checker de la extensión de Firefox estuvo bien, pero lxml.xpath() dice que la expresión no es válida o simplemente no devuelve filas.

Mi código de Python:

 from lxml import html f = open('TERC.xml', 'r') page = html.fromstring(f.read()) for r in page.xpath("//row[col[@name = 'POW' and not(text())]]"): print r.text_content() print "-------------------------" 

¿Cómo puedo encontrar en XPath 1.0 todas las filas con el col name="POW" vacío col name="POW" ?

Hay muchas definiciones posibles de “vacío” y para cada una de ellas hay una expresión XPath diferente que selecciona elementos “vacíos”.

Una definición razonable para un elemento vacío es: un elemento que no tiene elementos secundarios y ningún elemento secundario de nodo de texto, o un elemento que tiene un elemento secundario de nodo de texto único, cuyo valor de cadena contiene solo caracteres de espacio en blanco.

Esta expresión XPath :

 //row[col[@name = 'POW'] [not(*)] [not(normalize-space())] ] 

selecciona todos los elementos de row en el documento XML, que tienen una col secundaria, que tiene un name atributo con el valor de cadena "POW" y que no tiene elementos secundarios, y cuyo valor de cadena se compone completamente de caracteres de espacio en blanco, o es la cadena vacía.

En el caso de que “vacío” entienda que “no tiene hijos” , lo que significa que no hay elementos hijos ni nodos de PI hijos ni nodos de comentario hijos, utilice:

 //row[col[@name = 'POW'] [not(node())] ] 
 //row[col[@name='POW' and not(normalize-space())]] 

Para asegurarse de que la columna POW tampoco tenga elementos secundarios (incluso si no contienen ningún texto), agregue un filtro de predicado adicional:

 //row[col[@name='POW' and not(normalize-space()) and not(*)]] 

Utilizar esta:

 //row[col[@name = 'POW' and not(text())]]