XPath je zkratka pro jazyk XML Path. Lze s ním procházet elementy a atributy v dokumentu XML. Pokud jste nováčkem v XPATH, přečtěte si nejprve XPath Tutorial a prostudujte si oficiální dokumentaci XPATH.
Chatboti umělé inteligence mohou být velmi efektivní při generování a ověřování Xpath.
Podskupina XPath 1.0 je podporována s následujícími omezeními:
-
Osa ve fázi
-
Podporováno
předek, předek-nebo-já, atribut, vedlejší, potomek, potomek-nebo-já
-
Nepodporováno
následující, předchozí, následující sourozenec, předchozí sourozenec, jmenný prostor
-
-
Predikovat
-
Podporováno
podmínky na aktuálním uzlu nebo uzlu předka a jeho vlastnosti (atributy, jmenné prostory)
-
Nepodporováno (např.)
číslo pozice, vedlejší osa::, potomek, potomek-nebo-vlastní, následující::, předchozí::, následující-sourozenec::, předchozí-sourozenec::, funkce last()
-
Základní pravidla
-
Použít
/
a//
v cestách -
Použít jednoduché uvozovky
‚ ‘
v názvech -
Pro sloučení požadavků použít potrubí
|
-
Názvy rozlišují velká a malá písmena:
<Body>
se liší od<body>
Příklady
XPath Příklad 1 a XPath příklad 2 (včetně oboru názvů) jsou příklady následujících souborů:
-
Import všech elementů a všech atributů
//* | //@*
-
Import všech elementů a hodnota atributu1
(<elem1 atribut1="translate" atribut2="Nepřekládat"/>)
//* | //@attribute1
-
Import všech potomků vedlejších elementů
//Child//*
-
Import elementu lis a jeho potomků, pouze pokud je atribut translate='true'
(<lis translate="true">přeložit</lis><lis translate="false">nepřekládat</lis>)
//lis[@translate='true']/descendant-or-self::*
-
Import všech elementů a potomků, pokud je atribut elementu translate='true'
//*[@translate='true']/descendant-or-self::*
-
Import hodnoty atributu Text v elementu Data
<Datový text="Text k překladu">
//data/@text
-
Import elementu
<mT:translation>
a jeho potomků, kromě elementu<mT:ignorovat>
//mT:translation/descendant-or-self::*[not(ancestor-or-self::mT:ignore)]
-
Vyloučit všechny elementy s atributem translate='false'
//*[not(@translate='false')]
-
Vyloučit elementy 'lis' s atributem translate='false'
(<lis translate="false">Nepřekládat)
//*[not(self::lis[@translate='false'])]
-
Vyloučit elementy '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 elementy obsahující ‚odkaz‘
(<menu1link><tmenu41link>)
//*[not(contains(name(),'link')]
-
Vyloučit všechny elementy, pokud mají oni nebo jejich předek atribut 'lis' obsahující 'link'
(<ele lis=menu1link>, <mon lis=tmenu41link>)
//*[not(ancestor-or-self::node()[contains(@lis, 'link')])]
-
Import elementů PT, pokud má jejich hlavní LANG atribut „aktualizováno“ s rokem 2015
(<LANG updated="20150213T121526"><PT>'
//LANG[contains(@updated,'2015')]/PT
-
Import elementů ‚Popis‘ a ‚Název‘, pouze pokud nejsou potomky elementů ‚Definice‘ nebo ‚Typy‘
://*[not(ancestor-or-self::*[(name()='Definitions') or (name()='Types')]/*
[(name()='Popis') nebo (name()='Název')]
-
XML s oborem názvů
<root xmlns:xhtml="http://www.w3.org/1999/xhtml"><Child><Text>translate this</Text></Child>
-
Import všech elementů ve
<vedlejší>
://*[local-name()='Child']//*
-
importovat pouze elementy
<Text>
ve<vedlejší>
://*[local-name()='Child']/*[local-name()='Text']
-
import všech elementů pod elementem
<CONTRACT>
, pokud má atribut<CATEGORY>
v<CONTRACT>
hodnotu<ORIGINAL>
://*[local-name()='CONTRACT' a @CATEGORY='ORIGINAL']//*
-
-
XML s oborem názvů a atributy
<root>
xmlns:xhtml="http://www.w3.org/1999/xhtml"<vedlejší překlad='1'>vedlejší překlad</vedlejší>
-
import element
<vedlejší>
, pokud je atribut translate 1://*[local-name()="vedlejší"][@*[local-name()='translate']='1']
-
import všech elementů s atributem translate=true:
//*[@*[local-name()='translate']='true']
-
-
XML s oborem názvů. Import cíle elementu z elementu
tu
, ale ne, pokud ID atributu obsahuje ‚img‘ nebo ‚extra‘:-
Příklad souboru:
<tu ID="pages|obsah|extra"><ori xml:lang="cs">Course one</ori><cíl xml:lang="lang">Course one</cíl></tu>
-
Příklad XPATH:
//*[local-name()='tu' a nikoliv(contains(@id,'img') nebo contains(@id,'extra')]/*[local-name()='cíl']
-
-
Import všech elementů kromě
<komentářů>
a<lis>
, pokud<lis translate="true">
a jejich potomci://*[count(ancestor-or-self::node()[(name()='lis' a (not(@translate='true')) ) nebo name()='komentář']=0]
-
Import všech elementů kromě
<komentáře>
a kromě elementů s atributem<... attribute2="Nepřekládat">
a jejich potomků://*[count(ancestor-or-self::node()[(@attribute2='Nepřekládat') nebo name()='komentář']=0]
-
Import hodnot atributů
varName
aglossName
, ale pouze pokud mají jejich předci atributattribute1='translate'
neboattribute1='upravit'
://*[(self::node()[@attribute1='translate' nebo @attribute1='upravit'])]//@*[local-name()='varName' nebo local-name()='glossName']
-
Import všech elementů a atributů kromě elementů s atributem
Name= Back
,Menu
neboTime
://*[not(ancestor-or-self::node()[@Name='Back' nebo @Name='Menu' nebo @Name='Time'])] | //@*[not(ancestor-or-self::node()[@Name='Back' nebo @Name='Menu' nebo @Name='Time']]
V tom případě může být lepší import všech atributů, které nejsou potřebné pro import, zamknout. Jakmile jsou segmenty zamknuto, zkopírujte v editor zdroj text na cíl, objednávka se originál převedl do překladu.
-
Zamknout všechny elementy atributem
Name
s hodnotami:Zpět
,Menu
neboČas
a jejich potomci://*[@Name='Zpět' nebo @Name='Menu' nebo @Name='Time']/descendant-or-self::*
-
Zamknout všechny atributy
Název
s hodnotami:Zpět
,Menu
neboČas
a jejich potomci//*[@Name='Zpět' nebo @Name='Menu' nebo @Name='Time']//@*
-
Některé externí příklady.
Kontextová poznámka
Kontextové poznámky lze importovat 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 hlavním elementu (kontext 1): ../@context1
-
Atribut v elementu self (context2): @context2
-
Element na stejné úrovni (context 3): ../context3
Při importu Elements&Attributes: //*
bude obsah kontextové poznámky importován i do zdrojových segmentů. Vyloučit elementy/atributy kontextové poznámky z obecného importu v Elements&Atributes.