Cómo filtrar con XPath en todos los elementos sin un atributo específico

StackOverflow https://stackoverflow.com/questions/812090

  •  03-07-2019
  •  | 
  •  

Pregunta

Mi XPath está un poco oxidado ... Digamos que tengo este simple archivo XML:

<?xml version="1.0" encoding="utf-8" ?>
<States xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<States>
<StateProvince name="ALABAMA" abbrev="AL" />
....
<StateProvince name="AMERICAN SAMOA" abbrev="AS" territory="true"  />
</States>
</States>

Me gustaría ejecutar una consulta XPath simple para analizar todos los estados verdaderos (así que no tire de los estados donde territorio = verdadero). Intenté \ StateProvince [@territory! = 'True'] pero obtuve cero. Otras variaciones parecen estar fallando. Esto parece que debería ser simple, pero no encontrar lo que quiero.

Cualquier ayuda apreciada.

¿Fue útil?

Solución

Una expresión XPath que selecciona los elementos deseados :

& lbsp

Tome nota de que se debe evitar la abreviatura // siempre que sea posible ya que causa todo el documento (subárbol arraigado en la nodo de contexto) para ser escaneado .

La expresión XPath anterior evita el uso de // abreviatura teniendo en cuenta la estructura de el documento XML proporcionado originalmente.

Solo si la estructura del documento XML es completamente desconocida (y la expresión XPath está diseñada para usarse en muchos documentos XML con estructura desconocida) si el uso del // la abreviatura se considerará .

Otros consejos

Estás muy cerca:

//StateProvince[not(@territory) or @territory != 'true']

Debería conseguirte el resultado que deseas.

Esto debería funcionar:

//StateProvince[not(@territory='true')]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top