XPath signifie XML Path Language. Il peut être utilisé pour naviguer parmi les éléments et les attributs dans un document XML. Si vous débutez avec XPATH, veuillez d'abord consulter le tutoriel XPath et étudier la documentation XPATH officielle.
Les chatbots utilisant l'IA peuvent être très efficaces pour générer et vérifier Xpath.
Un sous-ensemble de XPath 1.0 est pris en charge avec les limitations suivantes :
-
Axe dans l'étape
-
Pris en charge :
ancestor, ancestor-or-self, attribute, enfant, descendant, descendant-or-self
-
Non pris en charge :
following, preceding, following-sibling, preceding-sibling, namespace
-
-
Prédicat
-
Pris en charge :
conditions sur le nœud actuel ou les nœuds ancêtres et ses propriétés (attributs, espaces de noms)
-
Non pris en charge (par exemple) :
numéro de position, axe child::, descendant, descendant-or-self, following::, preceding::, following-sibling::, preceding-sibling::, fonction last()
-
Règles de base
-
Utiliser
/et//dans les chemins -
Utiliser des guillemets simples
' 'dans les noms -
Utiliser un pipe
|pour joindre les requêtes -
Les noms sont sensibles à la casse :
<Body>est différent de<body>
Exemples
Exemple XPath 1 et Exemple XPath 2 (avec espace de noms) sont des fichiers exemples pour ce qui suit :
-
Importer tous les éléments et tous les attributs
//* | //@* -
Importer tous les éléments et la valeur de attribute1
(<elem1 attribute1="translate" attribute2="Do not translate"/>)//* | //@attribute1 -
Importer tous les descendants des éléments enfant
//Child//* -
Importer un élément lis et ses descendants uniquement si l'attribut translate='true'
(<lis translate=\"true\">traduire ceci</lis><lis translate=\"false\">ne pas traduire ceci</lis>)//lis[@translate='true']/descendant-or-self::* -
Importer tous les éléments et descendants si l'attribut de l'élément est translate='true'
//*[@translate='true']/descendant-or-self::* -
Importer la valeur de l'attribut Text dans l'élément Data
<Data Text="Text for translation">//data/@text -
Importer l'élément
<TA:translation>et ses descendants, sauf l'élément<TA:ignorer>//mT:translation/descendant-or-self::*[not(ancestor-or-self::mT:ignore)] -
Exclure tous les éléments avec l'attribut translate='false'
//*[not(@translate='false')] -
Exclure les éléments 'lis' avec l'attribut translate='false'
(<lis translate=\"false\">Ne pas traduire)//*[not(self::lis[@translate='false'])] -
Exclure les éléments 'lis' avec l'attribut translate='false' et leurs descendants
(<lis translate=\"false\"><p>Ne pas traduire)//*[not(ancestor-or-self::lis[@translate='false'])] -
Exclure tous les éléments contenant 'link'
(<menu1link><tmenu41link>)//*[not(contains(name(),'link'))] -
Exclure tous les éléments si eux ou leur parent possèdent un attribut 'lis' contenant 'link'
(<ele lis=menu1link>, <mon lis=tmenu41link>)//*[not(ancestor-or-self::node()[contains(@lis, 'link')])] -
Importer les éléments PT si leur parent LANG possède l'attribut 'updated' avec l'année 2015
(<LANG updated="20150213T121526"><PT>'//LANG[contains(@updated,'2015')]/PT -
Importer les éléments 'Description' et 'Name' uniquement s'ils ne sont pas des descendants des éléments 'Definitions' ou 'Types'
://*[not(ancestor-or-self::*[(name()='Definitions') or (name()='Types')])]/*[(name()='Description') or (name()='Name')] -
XML avec espace de noms
<root xmlns:xhtml="http://www.w3.org/1999/xhtml"><Child><Text>translate this</Text></Child>-
importer tous les éléments dans
<Child>://*[local-name()='Child']//* -
importer uniquement les éléments
<Text>dans<Child>://*[local-name()='Child']/*[local-name()='Text'] -
importer tous les éléments sous l'élément
<CONTRACT>, si l'attribut<CATEGORY>dans<CONTRACT>a la valeur<ORIGINAL>://*[local-name()='CONTRACT' and @CATEGORY='ORIGINAL']//*
-
-
XML avec espace de noms et attributs
<root>xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"<Child translate='1'>traduire ceci</Child>-
importer l'élément
<Child>si l'attribut translate est 1 ://*[local-name()=\"Child\"][@*[local-name()='translate']='1'] -
importer tous les éléments avec l'attribut translate=true :
//*[@*[local-name()='translate']='true']
-
-
XML avec espace de noms. Importer la cible de l'élément depuis l'élément
tu, mais pas lorsque l'attribut Identifiant contient 'img' ou 'extra' :-
Exemple de fichier :
<tu id=\"pages|contenu|extra\"><ori xml:lang=\"en\">Course one</ori><cible xml:lang=\"lang\">Course one</cible></tu> -
Exemple XPATH :
//*[local-name()='tu' and not(contains(@Identifiant,'img') or contains(@Identifiant,'extra'))]/*[local-name()='cible']
-
-
Importer tous les éléments sauf
<commenter>et<lis>sauf si<lis translate=\"true\">et leurs descendants ://*[count(ancestor-or-self::node()[(name()='lis' and (not(@translate='true')) ) or name()='commenter'])=0] -
Importer tous les éléments sauf
<commenter>et sauf les éléments avec l'attribut<... attribute2=\"Do not translate\">et leurs descendants ://*[count(ancestor-or-self::node()[(@attribute2='Do not translate') or name()='comment'])=0] -
Importer les valeurs des attributs
varNameetglossNamemais uniquement si leurs ancêtres possèdent l'attributattribute1='translate'ouattribute1='edit'://*[(self::node()[@attribute1='translate' or @attribute1='edit'])]//@*[local-name()='varName' or local-name()='glossName'] -
Importer tous les éléments et attributs sauf les éléments avec l'attribut
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'])]Dans ce cas, il peut être préférable d'importer tout et de verrouiller les attributs non requis pour l'importer. Une fois les segments verrouillés, copiez la source vers la cible dans l'éditeur afin que l'original soit transféré vers la traduction.
-
Verrouiller tous les éléments avec l'attribut
Nameayant pour valeurs :Back,MenuouTimeet leurs descendants ://*[@Name='Back' or @Name='Menu' or @Name='Time']/descendant-or-self::* -
Verrouiller tous les attributs de
Nameayant pour valeurs :Back,MenuouTimeet leurs descendants//*[@Name='Back' or @Name='Menu' or @Name='Time']//@*
-
Quelques exemples externes.
Note de contexte
Les notes de contexte peuvent être importées dans les segments traduits.
Il y a trois exemples dans cet échantillon :
<?xml version-"1.0" encoding="utf-8"?> <root> <element context1=\"Note dans l'attribut de parentElement 1 - Sélectionner ../@context1\"> <field context2=\"Note dans l'attribut 1 - Sélectionner @context2\" >pour la traduction 1</field> <context3>Note dans l'élément 1 - Sélectionner ../context3</context3> </element> <element context1=\"Note dans l'attribut de parentElement 2\"> <field context2=\"Note dans l'attribut 2\">pour la traduction 2</field> <context3>Note dans l'élément 2</context3> </element> </root>
-
Attribut dans l'élément parent (note de contexte 1) : ../@context1
-
Attribut dans l'élément lui-même (note de contexte 2) : @context2
-
Élément frère (note de contexte 3) : ../context3
Si vous importez Elements&Attributes: //*, le contenu de la note de contexte sera également importé dans les segments source. Exclure les éléments/attributs de note de contexte de l'importation générale dans Elements&Attributes.