Como filtrar com XPath em todos os elementos sem um atributo específico

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Meu XPath é um pouco enferrujado ... Vamos dizer que eu tenho esse arquivo XML simples:

<?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>

Gostaria de executar uma consulta XPath simples para analisar a todos os verdadeiros estados (por isso não puxar em estados onde o território = true). Tentei \ StateProvince [@territory! = 'True'], mas eu tenho zero. Outras variações parecem estar falhando. Isso parece que deve ser simples, mas não encontrar o que eu quero.

Qualquer ajuda apreciado.

Foi útil?

Solução

Uma expressão XPath que seleciona os elementos queriam :

/*/States/StateProvince[not(@territory='true')]

Do nota que deve-se evitar o // abreviatura sempre que possível, uma vez que faz com que todo o documento (sub-árvore com raiz no nó de contexto) a ser digitalizado .

A expressão acima XPath evita o uso de o // abreviatura tendo em conta a estrutura do documento XML originalmente fornecido.

Só se a estrutura do documento XML é completamente desconhecido (e a expressão XPath se destina a ser usado accross muitos documentos XML com estrutura desconhecida) caso o uso do // Seja abreviatura considerada .

Outras dicas

Você está muito perto:

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

Caso você obtenha o resultado desejado.

Isso deve funcionar:

//StateProvince[not(@territory='true')]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top