¿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íocol 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())]]