XPath signifie XML Path langue Il peut être utilisé pour naviguer à travers les éléments et les attributs dans un document XML. Si vous êtes nouveau sur XPATH, veuillez d’abord consulter le tutoriel XPath et étudier la documentation officielle.
Les chatbots 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 en étape
-
Supporté
ancêtre, ancêtre-ou-soi, attribut, enfant, descendant, descendant-ou-soi
-
Non supporté
Espace de noms suivant, précédent, suivant-frère, précédent-frère
-
-
Prédicat
-
Supporté
conditions sur le nœud actuel ou les nœuds ancêtres et ses propriétés (attributs, espaces de noms)
-
Non supporté (par exemple)
numéro de position, axe enfant ::, descendant, descendant-ou-soi, suivant ::, précédent ::, suivant-frère ::, précédent-frère ::, fonction last()
-
Règles de base
-
Utiliser
/
et//
dans les chemins -
Utiliser des guillemets simples
' '
dans les noms -
Utiliser un pipe
|
pour la fusion des demandes -
Les noms sont sensibles à la casse :
<Body>
est différent de<body>
Exemples
Les exemples XPath 1 et XPath 2 (avec espace de noms) sont des exemples de fichiers pour les suivants :
-
Importer tous les éléments et tous les attributs
//* | //@*
-
Importer tous les éléments et la valeur de l’attribut1
(<elem1 attribute1="translate" attribute2="Ne pas traduire"/>)
//* | //@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">translate this</lis><lis translate="false">ne pas traduire this</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 valeur de l'attribut Text in element Data
<Data Text="Texte à traduire">
//data/@text
-
Importer l’élément
<TA:traduction>
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 'lien'
(<menu1link><tmenu41link>)
//*[not(contains(name(),'link'))]
-
Exclure tous les éléments si eux ou leur ancêtre ont 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 langue parent a l’attribut « mis à jour » avec l’année 2015
(<LANG updated="20150213T121526"><PT>'
//LANG[contains(@updated,'2015')]/PT
-
Importer les éléments 'Description' et 'Nom' uniquement s'ils ne sont pas les descendants des éléments 'Définitions' ou 'Types'
://*[not(ancestor-or-self::*[(name()='Definitions') ou (name()='Types')]]/*
[(nom()='Description') ou (nom()='Nom')]
-
XML avec espace de noms
<root xmlns:xhtml="http://www.w3.org/1999/xhtml"><Enfant><Texte>traduire ce</Texte></Enfant>
-
importer tous les éléments dans
<Enfant>
://*[local-name()='Child']//*
-
importer uniquement les éléments
<Text>
dans<Enfant>
://*[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' et @CATEGORY='ORIGINAL']//*
-
-
XML avec espace de noms et attributs
<root>
xmlns:xhtml="http://www.w3.org/1999/xhtml"<Enfant traduire='1'>traduire ceci</Enfant>
-
importer l'élément
<Enfant>
si l'attribut traduire est 1://*[local-name()="Enfant"][@*[local-name()='translate']='1']
-
importer tous les éléments avec l'attribut translate=true:
//*[@*[local-name()='translate']='true']
-
-
XML avec espace de noms. Importer l'élément cible depuis l'élément
tu
, mais pas lorsque l'Identifiant contient 'img' ou 'extra' :-
Exemple de fichier :
<tu Identifiant="pages|contenu|extra"><ori xml:lang="fr">Cours un</ori><cible xml:lang="lang">Cours un</cible></tu>
-
Exemple XPATH :
//*[local-name()='tu' and not(contient(@id,'img') or contient(@id,'extra'))]/*[local-name()='cible']
-
-
Importer tous les éléments sauf
<commenter>
et<lis>
sauf<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 attribut<... attribute2="Ne pas traduire">
et leurs descendants ://*[count(ancestor-or-self::node()[(@attribute2='Do not translate') ou name()='commenter'])=0]
-
Importer les valeurs des attributs
varName
etglossName
mais uniquement si leurs ancêtres ont des attributsattribut1='translate'
ouattribut1='modifier'
://*[(self::node()[@attribute1='translate' ou @attribute1='modifier'])]//@*[local-name()='varName' ou local-name()='glossName']
-
Importer tous les éléments et attributs, à l ' exception des éléments portant l ' attribut
Nom= Retour
,Menu
ouHeure
://*[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 de tout importer et de verrouiller les attributs non requis pour importer . Une fois les segments verrouillé, copiez la source dans la cible dans l’éditeur commande que l’original soit transféré à la traduction.
-
Verrouillez tous les éléments portant l’attribut
Nom
avec des valeurs :Retour
,Menu
ouTemps
et leurs descendants ://*[@Nom='Retour' ou @Nom='Menu' ou @Nom='Temps']/descendant-ou-soi ::*
-
Verrouiller tous les attributs de
Name
avec des valeurs :Retour
,Menu
ouTemps
et leurs descendants//*[@Nom='Retour' ou @Nom='Menu' ou @Nom='Heure']//@*
-
Quelques exemples externes.
Note de contexte
Les notes de contexte peuvent être importées dans les segments traduits.
Trois exemples sont présentés dans cet exemple :
<?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 traduction1</field> <context3>Note dans l'élément 1 - sélectionnez ../context3</context3> </element> <element context1="Note dans l'attribut de parentElement 2"> <field context2="Note dans l'attribut 2">pour la traduction2</field> <context3>Note dans l’élément 2</context3> </element> </root>
-
Attribut dans l’élément parent (contexte 1) : ../@context1
-
Attribut dans l’élément self (context2) : @context2
-
Élément frère (contexte 3) :.../contexte3
Si vous importez Elements&Attributes: //*
, le contenu de la note de contexte sera également importé dans les segments source. Excluez les éléments/attributs de la note de contexte d’importer généralement dans Elements&Attributes.