XPath sta per lingua percorso XML. Può essere utilizzato per navigare tra elementi e attributi in un documento XML. Se sei nuovo su XPATH, consulta prima il Tutorial XPath e studia la documentazione XPATH ufficiale.
I chatbot IA possono essere molto efficaci nel generare e verificare Xpath.
È supportato un sottoinsieme di XPath 1.0 con le seguenti limitazioni:
-
Asse nel passaggio
-
Supportato
antenato, antenato-o-sé, attributo, (entità) subordinata, discendente, discendente-o-sé
-
Non supportato
spazio dei nomi following, previous, following-sibling, previous-sibling
-
-
Predica
-
Supportato
condizioni sul nodo corrente o sui nodi antenati e sue proprietà (attributi, spazi dei nomi)
-
Non supportato (ad esempio)
(entità) subordinata::, discendente, discendente-o-sé, seguente::, precedente::, following-sibling::, previous-sibling::, funzione last()
-
Regole di base
-
Usa
/
e//
nei percorsi -
Usa virgolette singole
" "
nei nomi -
Usa un tubo
|
per unire le richieste -
I nomi sono sensibili alle maiuscole e minuscole:
<Body>
è diverso da<body>
Esempi
L'esempio XPath 1 e l'esempio XPath 2 (con spazio dei nomi) sono file di esempio per quanto segue:
-
Importa tutti gli elementi e tutti gli attributi
//* | //@*
-
Importa tutti gli elementi e il valore di attributo1
(<elem1 attributo1="translate" attributo2="Non tradurre"/>)
//* | //@attribute1
-
Importa tutti i discendenti di elementi (entità) subordinate
//Child//*
-
Importa un elemento lis e i suoi discendenti solo se l'attributo translate='true'
(<lis translate="true">translate this</lis><lis translate="false">non tradurre this</lis>)
//lis[@translate='true']/descendant-or-self::*
-
Importa tutti gli elementi e i discendenti se l'attributo dell'elemento è translate='true'
//*[@translate='true']/descendant-or-self::*
-
Importa valore dell'attributo Testo nell'elemento Dati
<Testo dei dati = "Testo per la traduzione">
//data/@text
-
Importa l’elemento
<mT:translation>
e i suoi discendenti, tranne l’elemento<mT:ignora>
//mT:translation/descendant-or-self::*[not(ancestor-or-self::mT:ignore)]
-
Escludi tutti gli elementi con attributo translate='false'
//*[not(@translate='false')]
-
Escludi elementi "lis" con attributo translate='false'
(<lis translate="false">Non tradurre)
//*[not(self::lis[@translate='false'])]
-
Escludi elementi "lis" con attributo translate='false' e i loro discendenti
(<lis translate="false"><p>Non tradurre)
//*[not(ancestor-or-self::lis[@translate='false'])]
-
Escludi tutti gli elementi che contengono 'link'
(<menu1link><tmenu41link>)
//*[not(contains(name(),'link'))]
-
Escludi tutti gli elementi se essi o il loro antenato hanno un attributo "lis" contenente "link"
(<ele lis=menu1link>, <mon lis=tmenu41link>)
//*[not(ancestor-or-self::node()[contains(@lis, 'link')])]
-
Importa elementi PT se la loro entità principale LANG ha l'attributo "aggiornato" con l'anno 2015
(<LANG updated="20150213T121526"><PT>'
//LANG[contiene(@aggiornato,'2015')]/PT
-
Importa elementi 'Descrizione' e 'Nome' solo se non sono discendenti di elementi 'Definizioni' o 'Tipi'
://*[not(ancestor-or-self::*[(name()='Definitions') or (name()='Types')]]/*
[(name()='Descrizione') o (name()='Nome')]
-
XML con spazio dei nomi
<root xmlns:xhtml="http://www.w3.org/1999/xhtml">(entità) subordinata><Text>translate this</Text></(entità) subordinata>
-
importare tutti gli elementi in (entità) subordinata
:
//*[local-name()='Child']//*
-
importare solo elementi
<Text>
in<Child>:
//*[local-name()='Child']/*[local-name()='Text']
-
importare tutti gli elementi sotto l'elemento
<CONTRACT>
, se l'attributo<CATEGORY>
in<CONTRACT>
ha il valore<ORIGINALE>
://*[local-name()='CONTRACT' e @CATEGORY='ORIGINAL']//*
-
-
XML con namespace e attributi
<root>
xmlns:xhtml="http://www.w3.org/1999/xhtml"<(entità) subordinata translate='1'>translate this</(entità) subordinata>
-
importare elemento
<(entità) subordinata>
se l'attributo translate è 1://*[local-name()="(entità) subordinata"][@*[local-name()='translate']='1']
-
importare tutti gli elementi con attributo translate=true:
//*[@*[local-name()='translate']='true']
-
-
XML con spazio dei nomi. Importa la destinazione dell'elemento dall'elemento
tu
, ma non quando l'ID attributo contiene "img" o "extra":-
Esempio di file:
<tu id="pages|content|extra"><ori xml:lang="en">Corso uno</ori><destinazione xml:lang="lang">Corso uno</destinazione></tu>
-
Esempio XPATH:
//*[local-name()='tu' e not(contiene(@id,'img') o contiene(@id,'extra'))]/*[local-name()='destinazione']
-
-
Importa tutti gli elementi tranne
<commenta>
e<lis>
a meno che<lis translate="true">
e i loro discendenti://*[count(ancestor-or-self::node()[(name()='lis' e (not(@translate='true')) ) o name()='commenta'])=0]
-
Importa tutti gli elementi tranne
<commenta>
ed eccetto gli elementi con attributo<... attributo2="Non tradurre">
e i loro discendenti://*[count(ancestor-or-self::node()[(@attribute2='Non tradurre') o name()='commentare'])=0]
-
Importa valori di attributi
varName
eglossName
ma solo se i loro antenati hanno attributoattribute1='translate'
oattribute1='modifica'
://*[(self:node()[@attribute1='translate' o @attribute1='edit'])//@*[local-name()='varName' o local-name()='glossName']
-
Importa tutti gli elementi e attributi tranne gli elementi con attributo
Nome = Indietro
,Menu
oOra
://*[not(ancestor-or-self::node()[@Name='Back' o @Name='Menu' o @Name='Time'])] | //@*[not(ancestor-or-self::node()[@Name='Back' o @Name='Menu' o @Name='Time'])
In questo caso potrebbe essere meglio importare tutto e bloccare gli attributi non richiesti per importare. Una volta che i segmenti sono bloccato, copiare origine in destinazione nell'editor ordine trasferire l'originale nella traduzione.
-
Blocca tutti gli elementi con l'attributo
Nome
con valori:Indietro
,Menu
oOra
e loro discendenti://*[@Name='Indietro' o @Name='Menu' o @Name='Time']/descendant-or-self::*
-
Blocca tutti gli attributi di
Nome
con valori:Indietro
,Menu
oTempo
e loro discendenti//*[@Name='Indietro' o @Name='Menu' o @Name='Time']//@*
-
Alcuni esempi esterni.
Nota di contesto
Le note di contesto possono essere importate in segmenti tradotti.
Ci sono tre esempi in questo campione:
<?xml version-"1.0" encoding="utf-8"?> <root> <elemento context1="Nota nell'attributo di parentElement 1 - seleziona ../@context1"> <field context2="Nota nell'attributo 1 - seleziona @context2"> per translation1</field> <context3>Nota nell'elemento 1 - seleziona ../context3</context3> </elemento> <element context1="Nota nell'attributo di parentElement 2"> <field context2="Nota nell'attributo 2">per traduzione2</field> <contesto3>Nota nell'elemento 2</contesto3> </elemento> </root>
-
Attributo nell'elemento entità principale (contesto 1): ../@context1
-
Attributo nell’elemento self (context2): @context2
-
Elemento di pari livello (contesto 3): ../contesto3
Se si importano Elementi e Attributi: //*
, il contenuto della nota di contesto sarà importato anche nei segmenti di origine. Escludi gli elementi/attributi della nota di contesto dall’importazione generale in Elements&Attributes.