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:
-
Osa ve fázi
-
Podporováno
předek, předek-nebo-sám, atribut, dítě, potomek, potomek-nebo-sám
-
Nepodporováno
následující, předcházející, následující-sibling, předcházející-sibling, jmenný prostor
-
-
Predikát
-
Podporováno
podmínky na aktuálním uzlu nebo uzlech předka a jejich vlastnostech (atributy, jmenné prostory)
-
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ázvovým prostorem) 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="Nepřekládat"/>)//* | //@attribute1 -
Importovat všechny potomky prvků Child
//Child//* -
Importovat prvek lis a jeho potomky pouze pokud má atribut translate='true'
(<lis translate="true">přeložte toto</lis><lis translate="false">nepřekládejte toto</lis>)//lis[@translate='true']/descendant-or-self::* -
Importovat všechny prvky a potomky, pokud má prvek atribut translate='true'
//*[@translate='true']/descendant-or-self::* -
Importovat hodnotu atributu Text v prvku Data
<Data Text="Text for translation">//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">Do not translate)//*[not(self::lis[@translate='false'])] -
Vyloučit prvky 'lis' s atributem translate='false' a jejich potomky
(<lis translate="false"><p>Do not translate)//*[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ředci mají atribut 'lis' obsahující 'link'
(<ele lis=menu1link>, <mon lis=tmenu41link>)//*[not(ancestor-or-self::node()[contains(@lis, 'link')])] -
Importujte prvky PT, pokud jejich hlavní LANG má atribut 'updated' s rokem 2015
(<LANG updated="20150213T121526"><PT>'//LANG[contains(@updated,'2015')]/PT -
Importujte 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>-
importujte všechny prvky v
<Child>://*[local-name()='Child']//* -
importujte pouze prvky
<Text>v<Child>://*[local-name()='Child']/*[local-name()='Text'] -
importujte 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>-
importujte prvek
<Child>, pokud je atribut translate 1://*[local-name()="Child"][@*[local-name()='translate']='1'] -
importujte všechny prvky s atributem translate=true:
//*[@*[local-name()='translate']='true']
-
-
XML s názvem prostoru. Importujte prvek target z prvku
tu, ale ne když 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='Do not translate') 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,MenuneboČas://*[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'])]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:Back,MenuneboČasa jejich potomky://*[@Name='Back' or @Name='Menu' or @Name='Time']/descendant-or-self::* -
Zamkněte všechny atributy
Names hodnotami:Back,MenuneboČasa jejich potomky//*[@Name='Back' or @Name='Menu' or @Name='Time']//@*
-
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 - vybrat ../@context1"> <field context2="Poznámka v atributu 1 - vybrat @context2" >pro překlad1</field> <context3>Poznámka v elementu 1 - vybrat ../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 Elements&Attributes: //* obsah kontextové poznámky bude také importován do zdrojových segmentů. Vyloučit elementy/atributy kontextové poznámky z obecného importu v Elements&Attributes.