XPath znamená XML Path Language. Může být použit k navigaci mezi prvky a atributy v XML dokumentu. Pokud jste noví v XPATH, prosím, nejprve si přečtěte XPath Tutorial a prostudujte oficiální XPATH dokumentaci.
Chatboti umělé inteligence mohou být při generování a ověřování Xpath velmi efektivní.
Podmnožina XPath 1.0 je podporována s následujícími omezeními:
-
Os v fázi
-
Podporováno
předek, předek-nebo-sám, atribut, vedlejší, potomek, potomek-nebo-sám
-
Nepodporováno
následující, předcházející, následující-sibling, předcházející-sibling, namespace
-
-
Predikát
-
Podporováno
podmínky na aktuálním uzlu nebo uzlech předků a jejich vlastnostech (atributy, namespace)
-
Nepodporováno (například)
číslo pozice, osa child::, potomek, potomek-nebo-sám, following::, preceding::, following-sibling::, preceding-sibling::, funkce last()
-
Základní pravidla
-
Použijte
/a//v cestách -
Použijte jednoduché uvozovky
' 'v názvech -
Použijte trubku
|pro spojení požadavků -
Názvy jsou citlivé na velikost písmen:
<Body>se liší od<body>
Příklady
XPath příklad 1 a XPath příklad 2 (s názvem prostoru) jsou příkladové soubory pro následující:
-
Importovat všechny prvky a všechny atributy
//* | //@* -
Importovat všechny prvky a hodnotu atributu1
(<elem1 attribute1="translate" attribute2="Do not translate"/>)//* | //@attribute1 -
Importovat všechny potomky prvků Child
//Child//* -
Importovat prvek lis a jeho potomky pouze pokud je atribut translate='true'
(<lis translate="true">translate this</lis><lis translate="false">do not translate this</lis>)//lis[@translate='true']/descendant-or-self::* -
Importovat všechny prvky a potomky, pokud je atribut prvku translate='true'
//*[@translate='true']/descendant-or-self::* -
Importovat hodnotu atributu Text v prvku Data
<Data Text="Text k překladu">//data/@text -
Importovat prvek
<mT:translation>a jeho potomky, kromě prvku<mT:ignore>//mT:translation/descendant-or-self::*[not(ancestor-or-self::mT:ignore)] -
Vyloučit všechny prvky s atributem translate='false'
//*[not(@translate='false')] -
Vyloučit prvky 'lis' s atributem translate='false'
(<lis translate="false">Nepřekládat)//*[not(self::lis[@translate='false'])] -
Vyloučit prvky 'lis' s atributem translate='false' a jejich potomky
(<lis translate="false"><p>Nepřekládat)//*[not(ancestor-or-self::lis[@translate='false'])] -
Vyloučit všechny prvky obsahující 'link'
(<menu1link><tmenu41link>)//*[not(contains(name(),'link'))] -
Vyloučit všechny prvky, pokud mají nebo jejich předek má atribut 'lis' obsahující 'link'
(<ele lis=menu1link>, <mon lis=tmenu41link>)//*[not(ancestor-or-self::node()[contains(@lis, 'link')])] -
Importovat prvky PT, pokud jejich rodič LANG má atribut 'updated' s rokem 2015
(<LANG updated="20150213T121526"><PT>'//LANG[contains(@updated,'2015')]/PT -
Importovat prvky 'Description' a 'Name' pouze pokud nejsou potomky prvků 'Definitions' nebo 'Types'
://*[not(ancestor-or-self::*[(name()='Definitions') or (name()='Types')])]/*[(name()='Description') or (name()='Name')] -
XML s názvem prostoru
<root xmlns:xhtml="http://www.w3.org/1999/xhtml"><Child><Text>translate this</Text></Child>-
importovat všechny prvky v
<Child>://*[local-name()='Child']//* -
importovat pouze prvky
<Text>v<Child>://*[local-name()='Child']/*[local-name()='Text'] -
importovat všechny prvky pod prvkem
<CONTRACT>, pokud atribut<CATEGORY>v<CONTRACT>má hodnotu<ORIGINAL>://*[local-name()='CONTRACT' and @CATEGORY='ORIGINAL']//*
-
-
XML s názvem prostoru a atributy
<root>xmlns:xhtml="http://www.w3.org/1999/xhtml"<Child translate='1'>přeložte toto</Child>-
importovat prvek
<Child>pokud je atribut translate 1://*[local-name()="Child"][@*[local-name()='translate']='1'] -
importovat všechny prvky s atributem translate=true:
//*[@*[local-name()='translate']='true']
-
-
XML s názvem prostoru. Importujte prvek cíl z prvku
tu, ale ne pokud atribut id obsahuje 'img' nebo 'extra':-
Příklad souboru:
<tu id="pages|content|extra"><ori xml:lang="en">Kurz jedna</ori><target xml:lang="lang">Kurz jedna</target></tu> -
Příklad XPATH:
//*[local-name()='tu' and not(contains(@id,'img') or contains(@id,'extra'))]/*[local-name()='target']
-
-
Importujte všechny prvky kromě
<comment>a<lis>, pokud<lis translate="true">a jejich potomci://*[count(ancestor-or-self::node()[(name()='lis' and (not(@translate='true')) ) or name()='comment'])=0] -
Importujte všechny prvky kromě
<comment>a kromě prvků s atributem<... attribute2="Nepřekládat">a jejich potomci://*[count(ancestor-or-self::node()[(@attribute2='Nepřekládat') or name()='comment'])=0] -
Importujte hodnoty atributů
varNameaglossName, ale pouze pokud jejich předci mají atributattribute1='translate'neboattribute1='edit'://*[(self::node()[@attribute1='translate' or @attribute1='edit'])]//@*[local-name()='varName' or local-name()='glossName'] -
Importujte všechny prvky a atributy kromě prvků s atributem
Name= Zpět,Menu, neboČas://*[not(ancestor-or-self::node()[@Name='Zpět' or @Name='Menu' or @Name='Čas'])] | //@*[not(ancestor-or-self::node()[@Name='Zpět' or @Name='Menu' or @Name='Čas'])]V tomto případě může být lepší importovat vše a zamknout atributy, které nejsou potřebné pro import. Jakmile jsou segmenty zamknuty, zkopírujte zdroj do cíle v editoru, abyste měli originál převedený na překlad.
-
Zamkněte všechny prvky s atributem
Names hodnotami:Zpět,Menu, neboČasa jejich potomci://*[@Name='Zpět' or @Name='Menu' or @Name='Čas']/descendant-or-self::* -
Zamkněte všechny atributy
Names hodnotami:Zpět,Menu, neboČasa jejich potomci//*[@Name='Zpět' nebo @Name='Menu' nebo @Name='Čas']//@*
-
Některé externí příklady.
Kontextová poznámka
Kontextové poznámky mohou být importovány do přeložených segmentů.
V tomto vzorku jsou tři příklady:
<?xml version-"1.0" encoding="utf-8"?> <root> <element context1="Poznámka v atributu parentElement 1 - vyberte ../@context1"> <field context2="Poznámka v atributu 1 - vyberte @context2" >pro překlad1</field> <context3>Poznámka v elementu 1 - vyberte ../context3</context3> </element> <element context1="Poznámka v atributu parentElement 2"> <field context2="Poznámka v atributu 2">pro překlad2</field> <context3>Poznámka v elementu 2</context3> </element> </root>
-
Atribut v parent elementu (kontext 1): ../@context1
-
Atribut v elementu (kontext2): @context2
-
Sourozenecký element (kontext 3): ../context3
Pokud importujete Elementy&atributy: //*, obsah kontextové poznámky bude také importován do zdrojových segmentů. Vyloučit prvky/atributy kontextové poznámky z obecného importu v prvcích a atributech.