XPath steht für XML Path Language. Es kann verwendet werden, um durch Elemente und Attribute in einem XML-Dokument zu navigieren. Wenn Sie neu bei XPATH sind, lesen Sie bitte zuerst das XPath-Tutorial und studieren Sie die offizielle XPATH-Dokumentation.
KI-Chatbots können sehr effektiv beim Generieren und Überprüfen von Xpath sein.
Eine Teilmenge von XPath 1.0 wird mit den folgenden Einschränkungen unterstützt:
-
Achse im Schritt
-
Unterstützt
ancestor, ancestor-or-self, attribute, untergeordnetes Element, descendant, descendant-or-self
-
Nicht unterstützt
following, preceding, following-sibling, preceding-sibling, namespace
-
-
Prädikat
-
Unterstützt
Bedingungen für das aktuelle Element oder übergeordnete Elemente und deren Eigenschaften (Attribute, Namespaces)
-
Nicht unterstützt (zum Beispiel)
Positionsnummer, Achse child::, descendant, descendant-or-self, following::, preceding::, following-sibling::, preceding-sibling::, Funktion last()
-
Grundregeln
-
Verwenden Sie
/und//in Pfaden -
Verwenden Sie einfache Anführungszeichen
' 'in Namen -
Verwenden Sie einen Pipe-Operator
|zum Verknüpfen der Anfragen -
Namen unterscheiden zwischen Groß- und Kleinschreibung:
<Body>ist anders als<body>
Beispiele
XPath-Beispiel 1 und XPath-Beispiel 2 (mit Namespace) sind Beispieldateien für Folgendes:
-
Importieren Sie alle Elemente und alle Attribute
//* | //@* -
Importieren Sie alle Elemente und den Wert von attribute1
(<elem1 attribute1=\"übersetzen\" attribute2=\"Nicht übersetzen\"/>)//* | //@attribute1 -
Importieren Sie alle Nachfahren von untergeordneten Elementen
//Child//* -
Importieren Sie ein Element lis und seine Nachfahren nur, wenn das Attribut translate='true' ist
(<lis translate="true">translate this</lis><lis translate="false">do not translate this</lis>)//lis[@translate='true']/descendant-or-self::* -
Importieren Sie alle Elemente und Nachfahren, wenn das Attribut des Elements translate='true' ist
//*[@translate='true']/descendant-or-self::* -
Importieren Sie den Wert des Attributs Text im Element Data
<Data Text=\"Text für die Übersetzung\">//data/@text -
Importieren Sie das Element
<MT:translation>und seine untergeordneten Elemente, mit Ausnahme des Elements<MT:ignore>//mT:translation/descendant-or-self::*[not(ancestor-or-self::mT:ignore)] -
Ausschließen Sie alle Elemente mit dem Attribut translate='false'
//*[not(@translate='false')] -
Ausschließen Sie Elemente 'lis' mit dem Attribut translate='false'
(<lis translate="false">Do not translate)//*[not(self::lis[@translate='false'])] -
Ausschließen Sie Elemente 'lis' mit dem Attribut translate='false' und deren untergeordnete Elemente
(<lis translate="false"><p>Do not translate)//*[not(ancestor-or-self::lis[@translate='false'])] -
Ausschließen Sie alle Elemente, die 'link' enthalten
(<menu1link><tmenu41link>)//*[not(contains(name(),'link'))] -
Ausschließen Sie alle Elemente, wenn sie oder ihr übergeordnetes Element ein Attribut 'lis' haben, das 'link' enthält
(<ele lis=menu1link>, <mon lis=tmenu41link>)//*[not(ancestor-or-self::node()[contains(@lis, 'link')])] -
Importieren Sie PT-Elemente, wenn ihr übergeordnetes Element LANG das Attribut 'updated' mit dem Jahr 2015 hat
(<LANG updated="20150213T121526"><PT>'//LANG[contains(@updated,'2015')]/PT -
Importieren Sie die Elemente 'Description' und 'Name' nur, wenn sie keine untergeordneten Elemente der Elemente 'Definitions' oder 'Types' sind
://*[not(ancestor-or-self::*[(name()='Definitions') or (name()='Types')])]/*[(name()='Description') or (name()='Name')] -
XML mit Namespace
<root xmlns:xhtml="http://www.w3.org/1999/xhtml"><Child><Text>translate this</Text></Child>-
importieren Sie alle Elemente in
<untergeordnetes Element>://*[local-name()='Child']//* -
importieren Sie nur Elemente
<Text>in<untergeordnetes Element>://*[local-name()='Child']/*[local-name()='Text'] -
importieren Sie alle Elemente unter dem Element
<CONTRACT>, wenn das Attribut<CATEGORY>in<CONTRACT>den Wert<ORIGINAL>hat://*[local-name()='CONTRACT' and @CATEGORY='ORIGINAL']//*
-
-
XML mit Namespace und Attributen
<root>xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"<Child translate='1'>translate this</Child>-
importieren Sie das Element
<untergeordnetes Element>, wenn das Attribut translate 1 ist://*[local-name()=\"Child\"][@*[local-name()='translate']='1'] -
importieren Sie alle Elemente mit dem Attribut translate=true:
//*[@*[local-name()='translate']='true']
-
-
XML mit Namespace. Importieren Sie das Element Zielsprache aus dem Element
tu, aber nicht, wenn das Attribut ID 'img' oder 'extra' enthält:-
Dateibeispiel:
<tu id=\"pages|content|extra\"><ori xml:lang=\"en\">Course one</ori><target xml:lang=\"lang\">Course one</target></tu> -
XPATH-Beispiel:
//*[local-name()='tu' and not(contains(@ID,'img') or contains(@ID,'extra'))]/*[local-name()='Zielsprache']
-
-
Importieren Sie alle Elemente außer
<kommentieren>und<lis>, sofern nicht<lis translate=\"true\">und deren Nachfahren://*[count(ancestor-or-self::node()[(name()='lis' and (not(@translate='true')) ) or name()='kommentieren'])=0] -
Importieren Sie alle Elemente außer
<kommentieren>und außer Elementen mit dem Attribut<... attribute2=\"Do not translate\">und deren Nachfahren://*[count(ancestor-or-self::node()[(@attribute2='Do not translate') or name()='kommentieren'])=0] -
Importieren Sie Werte der Attribute
varNameundglossName, aber nur, wenn deren Vorfahren das Attributattribute1='translate'oderattribute1='Bearbeiten'haben://*[(self::node()[@attribute1='translate' or @attribute1='Bearbeiten'])]//@*[local-name()='varName' or local-name()='glossName'] -
Importieren Sie alle Elemente und Attribute außer Elementen mit dem Attribut
ID= Back,MenuoderTime://*[not(ancestor-or-self::node()[@ID='Back' or @ID='Menu' or @ID='Time'])] | //@*[not(ancestor-or-self::node()[@ID='Back' or @ID='Menu' or @ID='Time'])]In diesem Fall ist es möglicherweise besser, alles zu importieren und die für den Import nicht benötigten Attribute zu sperren. Sobald Segmente gesperrt sind, kopieren Sie die Ausgangssprache in die Zielsprache im Editor, um das Original in die Übersetzung zu übertragen.
-
Sperren Sie alle Elemente mit dem Attribut
IDmit den Werten:Back,MenuoderTimeund deren Nachfahren://*[@ID='Back' or @ID='Menu' or @ID='Time']/descendant-or-self::* -
Sperren Sie alle Attribute von
IDmit den Werten:Back,MenuoderTimeund deren Nachfahren//*[@ID='Back' or @ID='Menu' or @ID='Time']//@*
-
Einige externe Beispiele.
Kontexthinweis
Kontexthinweise können in übersetzte Segmente importiert werden.
Es gibt drei Beispiele in diesem Muster:
<?xml version-"1.0" encoding="utf-8"?> <root> <element context1=\"Hinweis im Attribut des übergeordnetes Element 1 - Auswählen ../@context1\"> <field context2=\"Hinweis im Attribut 1 - Auswählen @context2\" >für Übersetzung1</field> <context3>Hinweis im Element 1 - Auswählen ../context3</context3> </element> <element context1=\"Hinweis im Attribut des übergeordnetes Element 2\"> <field context2=\"Hinweis im Attribut 2\">für Übersetzung2</field> <context3>Hinweis im Element 2</context3> </element> </root>
-
Attribut im übergeordnetes Element (Kontexthinweis): ../@context1
-
Attribut im eigenen Element (Kontexthinweis): @context2
-
Geschwisterelement (Kontexthinweis): ../context3
Wenn Sie Elements&Attributes: //* importieren, wird der Content des Kontexthinweises ebenfalls in die Ausgangssprache-Segmente importiert. Schließen Sie die Elemente/Attribute des Kontexthinweises vom allgemeinen import in Elements&Attributes aus.