XPath расшифровывается как язык (язык) путей XML. Его можно использовать для навигации по элементам и атрибуты в XML документ. Если вы новичок в XPATH, пожалуйста, сначала ознакомьтесь с руководством по XPath и изучите официальную документацию по XPATH.
Чат-боты искусственного интеллекта (ИИ) могут быть очень эффективными в генерации и подтверждении Xpath.
Поддерживается подмножество XPath 1.0 со следующими ограничениями:
-
Ось в этап
-
Поддерживается
ancestor, ancestor-or-self, атрибуты, дочерний элемент, descendant, descendant-or-self
-
Не поддерживается:
following, preceding, following-sibling, preceding-sibling, namespace
-
-
Предикат
-
Поддерживается
условия для текущего узла или узлов-предков и их свойств (атрибуты, пространства имен)
-
Не поддерживается (например):
номер позиции, ось child::, descendant, descendant-or-self, following::, preceding::, following-sibling::, preceding-sibling::, функция last()
-
Основные правила
-
Использовать
/и//в путях -
Использовать одинарные кавычки
' 'в именах -
Использовать вертикальную черту
|для объединения запросов -
Имена чувствительны к регистру:
<Body>отличается от<body>
Примеры
Пример XPath 1 и Пример XPath 2 (с пространством имен) — это примеры файлов для следующего:
-
Импортировать все элементы и все атрибуты
//* | //@* -
Импортировать все элементы и значение атрибуты1
(<elem1 attribute1=\"translate\" attribute2=\"Do not translate\"/>)//* | //@attribute1 -
Импортировать все потомки дочерний элемент элементов
//Child//* -
Импортировать элемент lis и его потомки, только если атрибуты translate='true'
(<lis translate=\"true\">translate this</lis><lis translate=\"false\">do not translate this</lis>)//lis[@translate='true']/descendant-or-self::* -
Импортировать все элементы и дочерние элементы, если атрибуты элемента — translate='true'
//*[@translate='true']/descendant-or-self::* -
Импортировать значение атрибуты Text в элементе Data
<Data Text=\"Text for translation\">//data/@text -
Импортировать элемент
<mT:translation>и его дочерние элементы, исключить элемент<mT:ignore>//mT:translation/descendant-or-self::*[not(ancestor-or-self::mT:ignore)] -
Исключить все элементы с атрибуты translate='false'
//*[not(@translate='false')] -
Исключить элементы 'lis' с атрибуты translate='false'
(<lis translate=\"false\">Do not translate)//*[not(self::lis[@translate='false'])] -
Исключить элементы 'lis' с атрибуты translate='false' и их потомков
(<lis translate=\"false\"><p>Не переводить)//*[not(ancestor-or-self::lis[@translate='false'])] -
Исключить все элементы, содержащие 'link'
(<menu1link><tmenu41link>)//*[not(contains(name(),'link'))] -
Исключить все элементы, если они или их родительский элемент имеют атрибуты 'lis', содержащие 'link'
(<ele lis=menu1link>, <mon lis=tmenu41link>)//*[not(ancestor-or-self::node()[contains(@lis, 'link')])] -
Импортировать элементы PT, если их родительский элемент LANG имеет атрибуты 'updated' с 2015 годом
(<LANG updated=\"20150213T121526\"><PT>'//LANG[contains(@updated,'2015')]/PT -
Импортировать элементы 'Description' и 'Name' только в том случае, если они не являются дочерними элементами элементов 'Definitions' или 'Types'
://*[not(ancestor-or-self::*[(name()='Definitions') or (name()='Types')])]/*[(name()='Description') or (name()='Name')] -
XML с пространством имен
<root xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"><Child><Text>перевести это</Text></Child>-
импортировать все элементы в
<Child>://*[local-name()='Child']//* -
импортировать только элементы
<Text>в<дочерний элемент>://*[local-name()='Child']/*[local-name()='Text'] -
импортировать все элементы под элементом
<CONTRACT>, если атрибуты<CATEGORY>в<CONTRACT>имеет значение<ORIGINAL>://*[local-name()='CONTRACT' and @CATEGORY='ORIGINAL']//*
-
-
XML с пространством имен и атрибуты
<root>xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"<дочерний элемент translate='1'>translate this</дочерний элемент>-
импортировать элемент
<дочерний элемент>, если атрибуты translate равен 1://*[local-name()=\"дочерний элемент\"][@*[local-name()='translate']='1'] -
импортировать все элементы с атрибуты translate=true:
//*[@*[local-name()='translate']='true']
-
-
XML с пространством имен. импортировать элемент перевод из элемента
tu, но не тогда, когда атрибуты Идентификатор содержит 'img' или 'extra':-
Пример файла:
<tu id=\"pages|контент|extra\"><ori xml:lang=\"en\">Course one</ori><перевод xml:lang=\"lang\">Course one</перевод></tu> -
Пример XPATH:
//*[local-name()='tu' and not(contains(@Идентификатор,'img') or contains(@Идентификатор,'extra'))]/*[local-name()='перевод']
-
-
импортировать все элементы, кроме
<комментировать>и<lis>, если только<lis translate=\"true\">и их потомки://*[count(ancestor-or-self::node()[(name()='lis' and (not(@translate='true')) ) or name()='комментировать'])=0] -
импортировать все элементы, кроме
<комментировать>и кроме элементов с атрибуты<... атрибуты2=\"Do not translate\">и их потомков://*[count(ancestor-or-self::node()[(@атрибуты2='Do not translate') or name()='комментировать'])=0] -
импортировать значения атрибуты
varNameиglossName, но только если их предки имеют атрибутыатрибуты1='импортировать'илиатрибуты1='Редактировать'://*[(self::node()[@атрибуты1='импортировать' or @атрибуты1='Редактировать'])]//@*[local-name()='varName' or local-name()='glossName'] -
импортировать все элементы и атрибуты, кроме элементов с атрибуты
Name= Back,MenuилиTime://*[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'])]В этом случае может быть лучше импортировать все и заблокировать атрибуты, не требующиеся для импорта. Как только сегменты будут заблокированы, скопируйте оригинал в перевод в редакторе, чтобы оригинал был перенесен в перевод.
-
Заблокируйте все элементы с атрибуты
Nameсо значениями:Back,MenuилиTimeи их потомков://*[@Name='Back' or @Name='Menu' or @Name='Time']/descendant-or-self::* -
Заблокируйте все атрибуты
Nameсо значениями:Back,MenuилиTimeи их потомков//*[@Name='Back' or @Name='Menu' or @Name='Time']//@*
-
Некоторые внешние examples.
Контекстное примечание
Контекстные примечания можно импортировать в переведенные сегменты.
В этом примере есть три примера:
<?xml version-\"1.0\" encoding=\"utf-8\"?> <root> <element context1=\"Note in attribute of parentElement 1 - Выбрать ../@context1\"> <field context2=\"Note in attribute 1 - Выбрать @context2\" >for translation1</field> <context3>Note in element 1 - Выбрать ../context3</context3> </element> <element context1=\"Note in attribute of parentElement 2\"> <field context2=\"Note in attribute 2\">for translation2</field> <context3>Note in element 2</context3> </element> </root>
-
Атрибуты в родительский элемент (контекстное примечание 1): ../@context1
-
Атрибуты в собственном элементе (контекстное примечание 2): @context2
-
Родственный элемент (контекстное примечание 3): ../context3
При импортировании Elements&Attributes: //* контент контекстное примечание также будет импортирован в оригинал сегменты. Исключить элементы/атрибуты контекстное примечание из общего импорта в Elements&Attributes.