2012-07-16 23 views

Respuesta

20

Puede utilizar expresiones regulares - si su aplicación es compatible con XPath - o escribir

/item[not(@uid='id1' or @uid='id2')] 

que podría ser un poco más corto.

+1

. Tenías razón, el otro método si tenía dos elementos como 'id1' e 'id11' ignoraría ambos por error – Aitorito

3

tal vez algo como esto ??

/item[not(contains('id1 id2', @uid))] 
+1

funciona, pero arriesgado para los cambios, ya que 'contiene (x, y)' es verdadero para y no existente. – Arne

+1

@Arne Este es el más corto, pero ¿en qué casos fallaría? El atributo que utilizamos para filtrar es un ID único sin espacios – Aitorito

5

Si la lista de nombres de atributos es muy larga, la siguiente es una buena manera de manejar esta situación:

//item[not(contains('|attr1|attr2|attr3|attr4|attr5|attr6|attrN|', 
        concat('|', @uid, '|') 
        ) 
      )] 
+0

Necesitaba construir XPath muy largo en .NET . En lugar de usar cosas como el método LINQ Aggregate con seed, simplemente puede simplemente unir cadenas con '|', agregar trailing y leading, y usarlo. Gracias! – Nickmaovich

+0

@Nickmaovich, eres bienvenido. –

0

pares Al menos en XPath se realizan 2 comparaciones generales sobre secuencias y existencialmente, por lo usted puede escribir:

/item[not(@uid = ('id1','id2'))] 
Cuestiones relacionadas