XPath significa XML Path Language. Ele pode ser usado para navegar por elementos e atributos em um documento XML. Se for novo no XPATH, consulte oXPath Tutorialprimeiro e estudar o oficialDocumentação do XPATH.
Os chatbots de IA podem ser muito eficazes na geração e verificação do Xpath.
Um subconjunto do XPath 1.0 é suportado com as seguintes limitações:
-
Eixo em passo
-
Suportado
ancestral, ancestral-ou-eu, atributo, criança, descendente, descendente-ou-si mesmo
-
Não suportado
seguinte, anterior, seguinte-irmão, anterior-irmão, namespace
-
-
Predicado
-
Suportado
condições no nó atual ou nós ancestrais e suas propriedades (atributos, namespaces)
-
Não suportado (por exemplo)
número da posição, eixo filho::, descendente, descendente ou próprio, seguinte::, anterior::, seguinte-irmão::, anterior-irmão::, função last()
-
Regras básicas
-
Usar
/
e//
em caminhos -
Use aspas simples
' '
em nomes -
Use um pipe
|
para juntar os pedidos -
Os nomes diferenciam maiúsculas de minúsculas:
<Body>
é diferente de<body>
</body></Body>
Exemplos
XPath Exemplo 1eExemplo 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 de attribute1
(<elem1 attribute1="translate" attribute2="Do not translate"/>)
//* | //@attribute1
-
Importar todos os descendentes de elementos filho
//Child//*
-
Importar um elemento lis e seus descendentes somente 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::*
-
Importe todos os elementos e descendentes se o atributo do elemento for translate='true'
//*[@translate='true']/descendant-or-self::*
-
Importar valor do atributo Texto no elemento Dados
<Data Text="Text for translation">
//data/@text
-
Importe o
<mT:translation>
elemento e seus descendentes, exceto elemento<mT:ignore>
</mT:ignore></mT:translation>//mT:translation/descendant-or-self::*[not(ancestor-or-self::mT:ignore)]
-
Exclua todos os elementos com o atributo translate='false'
//*[not(@translate='false')]
-
Exclua os elementos 'lis' com o atributo translate='false'
(<lis translate="false">Não traduzir)</lis>
//*[not(self::lis[@translate='false'])]
-
Exclua os elementos 'lis' com o atributo translate='false' e seus descendentes
(<lis translate="false"><p>Não traduza)</lis>
//*[not(ancestor-or-self::lis[@translate='false'])]
-
Exclua todos os elementos que contenham 'link'
(<menu1link><tmenu41link>)
*[not(contém(nome(),'link'))]
-
Exclua todos os elementos se eles ou seu ancestral 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 LANG pai tiver o atributo 'atualizado' com o ano 2015
(<LANG updated="20150213T121526"><PT>'</PT></LANG>
LANG[contém(@updated,'2015')]/PT
-
Importe os elementos 'Descrição' e 'Nome' somente se eles não forem descendentes dos elementos 'Definições' ou 'Tipos'
://*[not(ancestral-ou-eu::*[(nome()='Definições') ou (nome()='Tipos')])]/*
[(nome()='Descrição') ou (nome()='Nome')]
-
XML com namespace
<root xmlns:xhtml="http://www.w3.org/1999/xhtml"><Child><Text>Traduzir isso</Text></Child></root>
-
importar todos os elementos em
<Child>
:</Child>//*[local-name()='Child']//*
-
importar apenas elementos
<Text>
em<Child>
:</Child></Text>//*[local-name()='Child']/*[local-name()='Text']
-
Importar todos os elementos em Elemento
<CONTRACT>
, atributo if<CATEGORY>
em<CONTRACT>
tem o valor<ORIGINAL>
</ORIGINAL></CONTRACT></CATEGORY></CONTRACT>://*[nome-local()='CONTRATO' e @CATEGORY='ORIGINAL']//*
-
-
XML com namespace e atributos
<root>
xmlns:xhtml="http://www.w3.org/1999/xhtml"<Child translate='1'>traduzir isso</Child>
</root>-
elemento de importação
<Child>
Se o atributo Translate for 1:*[nome-local()="Criança"][@*[nome-local()='traduzir']='1']
</Child> -
Importe todos os elementos com o atributo translate=true:
*[@*[nome-local()='traduzir']='verdadeiro']
-
-
XML com namespace. Importar o destino do elemento do elemento
você
, mas não quando o id do atributo contém 'img' ou 'extra':-
Exemplo de arquivo:
<tu id="pages|content|extra"><ori xml:lang="en">Curso um<target xml:lang="lang">Curso um</target xml:lang="lang"></ori xml:lang="en"></tu id="pages|content|extra">
-
Exemplo de XPATH:
*[nome-local()='tu' and not(contains(@id,'img') ou contains(@id,'extra'))]/*[nome-local()='alvo']
-
-
Importar todos os elementos, exceto
<comment>
e<lis>
a menos que<lis translate="true">
e seus descendentes:</lis></lis></comment>*[count(ancestral-ou-eu::node()[(nome()='lis' e (not(@translate='true')) ) ou nome()='comentário'])=0]
-
Importar todos os elementos, exceto
<comment>
e exceto elementos com atributo<... attribute2="Do not translate">
e seus descendentes:</...></comment>*[count(ancestor-or-self::node()[(@attribute2='Não traduzir') ou name()='comment'])=0]
-
Importar valores de atributos
varName
enome do brilho
mas apenas se seus ancestrais tiverem atributoatributo1='traduzir'
ouatributo1='editar'
:*[(self::node()[@attribute1='translate' or @attribute1='edit'])]//@*[local-name()='varName' or local-name()='glossName']
-
Importe todos os elementos e atributos, exceto os elementos com o atributo
Nome= Voltar
,Menu
ouHora
:*[not(ancestral-ou-eu::node()[@Name='Voltar' ou @Name='Menu' ou @Name='Tempo'])] | @*[not(ancestral-ou-eu::node()[@Name='Voltar' ou @Name='Menu' ou @Name='Tempo'])]
Nesse caso, pode ser melhor importar todos e bloquear os atributos não necessários para a importação. Depois que os segmentos estiverem bloqueados, copie a origem para o destino no editor para que o original seja transferido para a tradução.
-
Bloquear todos os elementos com o atributo
Nome
com valores:Voltar
,Menu
ouHora
e seus descendentes:*[@Name='Voltar' ou @Name='Menu' ou @Name='Tempo']/descendente-ou-eu::*
-
Bloquear todos os atributos de
Nome
com valores:Voltar
,Menu
ouHora
e seus descendentes*[@Name='Voltar' ou @Name='Menu' ou @Name='Hora']//@*
-
Alguns externosExemplos.
Nota de contexto
As notas de contexto podem ser importadas para segmentos traduzidos.
Há três exemplos neste exemplo:
<?xml version-"1.0" encoding="utf-8"?> <root> <element context1="Note in attribute of parentElement 1 - select ../@context1"> <field context2="Note in attribute 1 - select @context2">para tradução1</field> <context3>Nota no elemento 1 - selecione .. /contexto3</context3> </element> <element context1="Note in attribute of parentElement 2"> <field context2="Note in attribute 2">para tradução2</field> <context3>Nota no elemento 2</context3> </element> </root>
-
Atributo no elemento pai (contexto 1): .. /@context1
-
Atributo no elemento self (context2): @context2
-
Elemento irmão (contexto 3): .. /contexto3
Se estiver importando Elementos&Atributos: //*
O conteúdo da nota de contexto também será importado para os segmentos de origem. Exclua os elementos/atributos da nota de contexto da importação geral em Elements&Attributes.