XPath significa XML Path Language. Ele pode ser usar para navegar por elementos e atributos em um documento XML. Se for novo em XPATH, consulte primeiro o Tutorial de XPath e estude a documentação oficial do XPATH.
Chatbots de IA podem ser muito eficazes na geração e verificação de Xpath.
Um subconjunto do XPath 1.0 é compatível com as seguintes limitações:
-
Eixo na etapa
-
Aceita:
ancestor, ancestor-or-self, attribute, secundário, descendant, descendant-or-self
-
Não compatível com:
following, preceding, following-sibling, preceding-sibling, namespace
-
-
Predicado
-
Aceita:
condições no nó atual ou nós ancestrais e suas propriedades (atributos, namespaces)
-
Não compatível com (por exemplo):
número de posição, eixo secundário::, descendant, descendant-or-self, following::, preceding::, following-sibling::, preceding-sibling::, função last()
-
Regras básicas
-
Usar
/e//em caminhos -
Usar aspas simples
' 'em nomes -
Usar uma barra vertical
|para unir as solicitações -
Nomes diferenciam maiúsculas de minúsculas:
<Body>é diferente de<body>
Exemplos
Exemplo de XPath 1 e Exemplo de XPath 2 (com namespace) são arquivos de exemplo para o seguinte:
-
Importar todos os elementos e todos os atributos
//* | //@* -
Importar todos os elementos e o valor do atributo1
(<elem1 attribute1="translate" attribute2="Do not translate"/>)//* | //@attribute1 -
Importar todos os descendentes de elementos secundário
//Child//* -
Importar um elemento lis e seus descendentes apenas se o atributo translate='true'
(<lis translate="true">translate this</lis><lis translate="false">do not translate this</lis>)//lis[@translate='true']/descendant-or-self::* -
Importar todos os elementos e descendentes se o atributo do elemento for translate='true'
//*[@translate='true']/descendant-or-self::* -
Importar valor do atributo Text no elemento Data
<Data Text=\"Texto para tradução\">//data/@text -
Importar o elemento
<tradução automática:tradução automática>e seus descendentes, exceto o elemento<tradução automática:ignorar>//mT:translation/descendant-or-self::*[not(ancestor-or-self::mT:ignore)] -
Excluir todos os elementos com o atributo translate='false'
//*[not(@translate='false')] -
Excluir elementos 'lis' com o atributo translate='false'
(<lis translate=\"false\">Não traduzir)//*[not(self::lis[@translate='false'])] -
Excluir elementos 'lis' com o atributo translate='false' e seus descendentes
(<lis translate=\"false\"><p>Não traduzir)//*[not(ancestor-or-self::lis[@translate='false'])] -
Excluir todos os elementos que contêm 'link'
(<menu1link><tmenu41link>)//*[not(contains(name(),'link'))] -
Excluir todos os elementos se eles ou seu principal tiverem um atributo 'lis' contendo 'link'
(<ele lis=menu1link>, <mon lis=tmenu41link>)//*[not(ancestor-or-self::node()[contains(@lis, 'link')])] -
Importar elementos PT se seu principal LANG tiver o atributo 'updated' com o ano 2015
(<LANG updated="20150213T121526"><PT>'//LANG[contains(@updated,'2015')]/PT -
Importar elementos 'Description' e 'Name' apenas se eles não forem descendentes de elementos 'Definitions' ou 'Types'
://*[not(ancestor-or-self::*[(name()='Definitions') or (name()='Types')])]/*[(name()='Description') or (name()='Name')] -
XML com namespace
<root xmlns:xhtml="http://www.w3.org/1999/xhtml"><Child><Text>translate this</Text></Child>-
importar todos os elementos em
<secundário>://*[local-name()='Child']//* -
importar apenas elementos
<Text>em<secundário>://*[local-name()='Child']/*[local-name()='Text'] -
importar todos os elementos sob o elemento
<CONTRACT>, se o atributo<CATEGORY>em<CONTRACT>tiver o valor<ORIGINAL>://*[local-name()='CONTRACT' and @CATEGORY='ORIGINAL']//*
-
-
XML com namespace e atributos
<root>xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"<secundário translate='1'>traduza isto</secundário>-
importar elemento
<secundário>se o atributo translate for 1://*[local-name()=\"secundário\"][@*[local-name()='translate']='1'] -
importar todos os elementos com o atributo translate=true:
//*[@*[local-name()='translate']='true']
-
-
XML com namespace. importar o elemento tradução do elemento
tu, mas não quando o atributo ID contém 'img' ou 'extra':-
Exemplo de arquivo:
<tu id=\"pages|content|extra\"><ori xml:lang=\"en\">Course one</ori><target xml:lang=\"lang\">Course one</target></tu> -
Exemplo de XPATH:
//*[local-name()='tu' and not(contains(@id,'img') or contains(@id,'extra'))]/*[local-name()='target']
-
-
importar todos os elementos exceto
<comment>e<lis>a menos que<lis translate=\"true\">e seus descendentes://*[count(ancestor-or-self::node()[(name()='lis' and (not(@translate='true')) ) or name()='comment'])=0] -
importar todos os elementos exceto
<comment>e exceto elementos com o atributo<... attribute2=\"Do not translate\">e seus descendentes://*[count(ancestor-or-self::node()[(@attribute2='Do not translate') or name()='comment'])=0] -
importar valores dos atributos
varNameeglossNamemas apenas se seus ancestrais tiverem o atributoattribute1='translate'ouattribute1='edit'://*[(self::node()[@attribute1='translate' or @attribute1='edit'])]//@*[local-name()='varName' or local-name()='glossName'] -
importar todos os elementos e atributos exceto elementos com o atributo
Name= Back,MenuouTime://*[not(ancestor-or-self::node()[@Name='Back' or @Name='Menu' or @Name='Time'])] | //@*[not(ancestor-or-self::node()[@Name='Back' or @Name='Menu' or @Name='Time'])]Neste caso, pode ser melhor importar tudo e bloquear os atributos não necessários para importar. Uma vez que os segmentos estejam bloqueado, copie o texto original para a tradução no editor para que o original seja transferido para o pedido de tradução.
-
bloquear todos os elementos com o atributo
Namecom valores:Back,MenuouTimee seus descendentes://*[@Name='Back' or @Name='Menu' or @Name='Time']/descendant-or-self::* -
bloquear todos os atributos de
Namecom valores:Back,MenuouTimee seus descendentes//*[@Name='Back' or @Name='Menu' or @Name='Time']//@*
-
Alguns exemplos externos.
Nota de contexto
Notas de contexto podem ser importadas para segmentos traduzidos.
Existem três exemplos nesta amostra:
<?xml version-"1.0" encoding="utf-8"?> <root> <element context1=\"Nota de contexto no atributo do elemento principal 1 - Selecionar ../@context1\"> <field context2=\"Nota de contexto no atributo 1 - Selecionar @context2\" >para tradução1</field> <context3>Nota de contexto no elemento 1 - Selecionar ../context3</context3> </element> <element context1=\"Nota de contexto no atributo do elemento principal 2\"> <field context2=\"Nota de contexto no atributo 2\">para tradução2</field> <context3>Nota de contexto no elemento 2</context3> </element> </root>
-
Atributo no elemento principal (nota de contexto 1): ../@context1
-
Atributo no próprio elemento (nota de contexto 2): @context2
-
Elemento irmão (nota de contexto 3): ../context3
Ao importar Elementos&Atributos: //*, o conteúdo da nota de contexto também será importado para os segmentos de texto original. Excluir os elementos/atributos de nota de contexto da importação geral em Elementos&Atributos.