Diferença entre //, .// e ..// no XPath?

Sep 22 2020

Alguém pode me ajudar com a diferença entre os XPaths abaixo e me ajudar a entender qual deles usar quando. Descobri que todos os três funcionam, mas não tenho certeza de quando usá-los.

  1. Get Element Text ${output} //priority

  2. Get Element Text ${output} .//vrrp-group/name

  3. Get Element Text ${output} ..//track/priority-hold-time

Respostas

2 kjhughes Sep 22 2020 at 20:57

Em geral

//seleciona entre nós descendentes ou nós próprios (ao longo do descendant-or-selfeixo ). É uma abreviação de /descendant-or-self::node()/.

  1. // começa a partir do nó raiz, cobrindo assim todo o documento.
  2. .//começa a partir do nó de contexto .
  3. ..// começa a partir do pai do nó de contexto.

No seu caso particular

  1. //priorityseleciona todos os priorityelementos do documento.
  2. .//vrrp-group/nameseleciona, abaixo do nó de contexto, todos os nameelementos com um vrrp-grouppai.
  3. ..//track/priority-hold-timeseleciona, abaixo do pai do nó de contexto, todos os priority-hold-timeelementos com um trackpai.

Nota da estrutura do robô:

No contexto do Get Element Textcomando da biblioteca XML Robotframework, o XPath deve ser relativo ao nó de origem ( ${output}no seu caso). XPaths absolutos, como //prioritynão são permitidos lá.

Veja também

  • Diferença entre "//" e "/" no XPath?
  • Qual é a diferença entre .// e // * em XPath?
  • Qual é o significado de .// em XPath?