XPath sta per XML Path Language. Può essere usato per navigare tra elementi e attributi in un documento XML. Se sei nuovo di XPATH, consulta prima il Tutorial XPath e studia la documentazione XPATH ufficiale.
I chatbot IA possono essere molto efficaci nel generare e verificare Xpath.
Un sottoinsieme di XPath 1.0 è supportato con le seguenti limitazioni:
-
Asse nel passaggio
-
Supporta:
ancestor, ancestor-or-self, attribute, (entità) subordinata, descendant, descendant-or-self
-
Non supporta:
following, preceding, following-sibling, preceding-sibling, namespace
-
-
Predicato
-
Supporta:
condizioni sul nodo corrente o sui nodi antenati e le relative proprietà (attributi, namespace)
-
Non supporta (ad esempio):
numero di posizione, asse (entità) subordinata::, discendente, discendente-o-sé, following::, preceding::, following-sibling::, preceding-sibling::, funzione last()
-
Regole di base
-
Usare
/e//nei percorsi -
Usare virgolette singole
' 'nei nomi -
Usare una pipe
|per unire le richieste -
I nomi sono sensibili alle maiuscole:
<Body>è diverso da<body>
Esempi
Esempio XPath 1 e Esempio XPath 2 (con namespace) sono file di esempio per quanto segue:
-
Importare tutti gli elementi e tutti gli attributi
//* | //@* -
Importare tutti gli elementi e il valore dell'attributo1
(<elem1 attribute1=\"translate\" attribute2=\"Do not translate\"/>)//* | //@attribute1 -
Importare tutte le entità subordinate degli elementi (entità) subordinata
//Child//* -
Importare un elemento lis e le sue entità subordinate solo se l'attributo translate='true'
(<lis translate=\"true\">tradurre questo</lis><lis translate=\"false\">non tradurre questo</lis>)//lis[@translate='true']/descendant-or-self::* -
Importare tutti gli elementi e le entità subordinate se l'attributo dell'elemento è translate='true'
//*[@translate='true']/descendant-or-self::* -
Importare il valore dell'attributo Text nell'elemento Data
<Data Text="Text for translation">//data/@text -
Importare l'elemento
<mT:translation>e le sue entità subordinate, eccetto l'elemento<mT:ignore>//mT:translation/descendant-or-self::*[not(ancestor-or-self::mT:ignore)] -
Escludere tutti gli elementi con l'attributo translate='false'
//*[not(@translate='false')] -
Escludere gli elementi 'lis' con l'attributo translate='false'
(<lis translate=\"false\">Non tradurre)//*[not(self::lis[@translate='false'])] -
Escludere gli elementi 'lis' con l'attributo translate='false' e le loro entità subordinate
(<lis translate="false"><p>Do not translate)//*[not(ancestor-or-self::lis[@translate='false'])] -
Escludere tutti gli elementi contenenti 'link'
(<menu1link><tmenu41link>)//*[not(contains(name(),'link'))] -
Escludere tutti gli elementi se essi o la loro entità subordinata hanno un attributo 'lis' contenente 'link'
(<ele lis=menu1link>, <mon lis=tmenu41link>)//*[not(ancestor-or-self::node()[contains(@lis, 'link')])] -
Importare elementi PT se la loro entità principale LANG ha l'attributo 'updated' con anno 2015
(<LANG updated="20150213T121526"><PT>'//LANG[contains(@updated,'2015')]/PT -
Importare gli elementi 'Description' e 'Name' solo se non sono (entità) subordinata di elementi 'Definitions' o 'Types'
://*[not(ancestor-or-self::*[(name()='Definitions') or (name()='Types')])]/*[(name()='Description') or (name()='Name')] -
XML con namespace
<root xmlns:xhtml="http://www.w3.org/1999/xhtml"><Child><Text>translate this</Text></Child>-
importare tutti gli elementi in
<Child>://*[local-name()='Child']//* -
importare solo gli 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<ORIGINAL>://*[local-name()='CONTRACT' and @CATEGORY='ORIGINAL']//*
-
-
XML con namespace e attributi
<root>xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"<Child translate='1'>tradurre questo</Child>-
importare l'elemento
<Child>se l'attributo translate è 1://*[local-name()=\"Child\"][@*[local-name()='translate']='1'] -
importare tutti gli elementi con l'attributo translate=true:
//*[@*[local-name()='translate']='true']
-
-
XML con namespace. Importare l'elemento destinazione dall'elemento
tu, ma non quando l'attributo ID contiene 'img' o 'extra':-
Esempio di file:
<tu id=\"pages|ID|extra\"><ori xml:lang=\"en\">Course one</ori><target xml:lang=\"lang\">Course one</target></tu> -
Esempio XPATH:
//*[local-name()='tu' and not(contains(@ID,'img') or contains(@ID,'extra'))]/*[local-name()='destinazione']
-
-
Importare tutti gli elementi eccetto
<comment>e<lis>a meno che<lis translate=\"true\">e i loro discendenti://*[count(ancestor-or-self::node()[(name()='lis' and (not(@translate='true')) ) or name()='comment'])=0] -
Importare tutti gli elementi eccetto
<comment>ed eccetto gli elementi con attributo<... attribute2=\"Do not translate\">e i loro discendenti://*[count(ancestor-or-self::node()[(@attribute2='Do not translate') or name()='comment'])=0] -
Importare i valori degli attributi
varNameeglossNamema solo se i loro antenati hanno l'attributoattribute1='translate'oattribute1='edit'://*[(self::node()[@attribute1='translate' or @attribute1='Modifica'])]//@*[local-name()='varName' or local-name()='glossName'] -
Importare tutti gli elementi e gli attributi eccetto gli elementi con l'attributo
Name= Back,MenuoTime://*[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'])]In questo caso potrebbe essere meglio importare tutto e bloccare gli attributi non richiesti per l'importazione. Una volta che i segmenti sono bloccati, copiare l'origine nella destinazione nell'editor per fare in modo che l'originale venga trasferito nella traduzione.
-
Bloccare tutti gli elementi con l'attributo
Namecon valori:Back,MenuoTimee i loro discendenti://*[@Name='Back' or @Name='Menu' or @Name='Time']/descendant-or-self::* -
Bloccare tutti gli attributi di
Namecon valori:Back,MenuoTimee i loro discendenti//*[@Name='Back' or @Name='Menu' or @Name='Time']//@*
-
Alcuni esempi esterni.
Nota di contesto
Le note di contesto possono essere importate nei segmenti tradotti.
Ci sono tre esempi in questo campione:
<?xml version-\"1.0\" encoding=\"utf-8\"?> <root> <element context1=\"Nota di contesto nell'attributo dell'entità principale 1 - Seleziona ../@context1\"> <field context2=\"Nota di contesto nell'attributo 1 - Seleziona @context2\" >per la traduzione1</field> <context3>Nota di contesto nell'elemento 1 - Seleziona ../context3</context3> </element> <element context1=\"Nota di contesto nell'attributo dell'entità principale 2\"> <field context2=\"Nota di contesto nell'attributo 2\">per la traduzione2</field> <context3>Nota di contesto nell'elemento 2</context3> </element> </root>
-
Attributo nell'entità principale (nota di contesto 1): ../@context1
-
Attributo nell'elemento stesso (nota di contesto 2): @context2
-
Elemento fratello (nota di contesto 3): ../context3
Se si desidera importare Elements&Attributes: //* anche il contenuto della nota di contesto verrà importato nei segmenti di origine. Escludere gli elementi/attributi della nota di contesto dall'importazione generale in Elements&Attributes.