Импортировать утилиты

XPath (TMS)

Контент автоматически переведен с английского языка с помощью Phrase Language AI.

XPath означает язык пути XML. Он может использоваться для навигации по элементам и атрибутам в XML-документе. Если вы новичок в XPATH, пожалуйста, сначала посмотрите на Учебник по XPath и изучите официальную документацию XPATH.

Чат-боты искусственного интеллекта (ИИ) могут быть очень эффективными в генерации и подтверждении Xpath.

Подмножество XPath 1.0 поддерживается с следующими ограничениями:

  • Ось в этапе

    • Поддерживается

      предок, предок или сам, атрибут, дочерний элемент, потомок, потомок или сам

    • Не поддерживается

      следующий, предшествующий, следующий-сосед, предшествующий-сосед, пространство имен

  • Предикат

    • Поддерживается

      условия для текущего узла или узлов-предков и его свойств (атрибуты, пространства имен)

    • Не поддерживается (например)

      номер позиции, ось child::, потомок, потомок или сам, следующий::, предшествующий::, следующий-сосед::, предшествующий-сосед::, функция last()

Основные правила

  • Используйте / и // в путях

  • Используйте одинарные кавычки ' ' в именах

  • Используйте вертикальную черту | для объединения запросов

  • Имена чувствительны к регистру: <Body> отличается от <body>

Примеры

Пример XPath 1 и Пример XPath 2 (с пространством имен) являются примерами файлов для следующего:

  1. Импортировать все элементы и все атрибуты

    //* | //@*

  2. Импортировать все элементы и значение атрибута attribute1

    (<elem1 attribute1="translate" attribute2="Не переводить"/>)

    //* | //@attribute1

  3. Импортировать всех потомков элементов Child

    //Child//*

  4. Импортировать элемент lis и его потомков только если атрибут translate='true' 

    (<lis translate="true">перевести это</lis><lis translate="false">не переводить это</lis>)

    //lis[@translate='true']/descendant-or-self::*

  5. Импортировать все элементы и потомков, если атрибут элемента translate='true'

    //*[@translate='true']/descendant-or-self::*

  6. Импортировать значение атрибута Text в элементе Data

    <Data Text="Текст для перевода">

    //data/@text

  7. Импортировать элемент <mT:translation> и его потомков, кроме элемента <mT:ignore>

    //mT:translation/descendant-or-self::*[not(ancestor-or-self::mT:ignore)]

  8. Исключить все элементы с атрибутом translate='false'

    //*[not(@translate='false')]

  9. Исключить элементы 'lis' с атрибутом translate='false'

    (<lis translate="false">Не переводить)

    //*[not(self::lis[@translate='false'])]

  10. Исключить элементы 'lis' с атрибутом translate='false' и их потомков

    (<lis translate="false"><p>Не переводить)

    //*[not(ancestor-or-self::lis[@translate='false'])]

  11. Исключить все элементы, содержащие 'link'

    (<menu1link><tmenu41link>)

    //*[not(contains(name(),'link'))]

  12. Исключить все элементы, если они или их предки имеют атрибут 'lis', содержащий 'link'

    (<ele lis=menu1link>, <mon lis=tmenu41link>)

    //*[not(ancestor-or-self::node()[contains(@lis, 'link')])]

  13. Импортировать элементы PT, если их родитель LANG имеет атрибут 'updated' с годом 2015

    (<LANG updated="20150213T121526"><PT>'

    //LANG[contains(@updated,'2015')]/PT

  14. Импортировать элементы 'Description' и 'Name' только если они не являются потомками элементов 'Definitions' или 'Types'

    ://*[not(ancestor-or-self::*[(name()='Definitions') or (name()='Types')])]/*

    [(name()='Description') or (name()='Name')]

  15. XML с пространством имен

    <root xmlns:xhtml="http://www.w3.org/1999/xhtml"><Child><Text>переведите это</Text></Child>

    • импортировать все элементы в <Child>:

      //*[local-name()='Child']//*

    • импортировать только элементы <Text> в <Child>:

      //*[local-name()='Child']/*[local-name()='Text']

    • импортировать все элементы под элементом <CONTRACT>, если атрибут <CATEGORY> в <CONTRACT> имеет значение <ORIGINAL>

      ://*[local-name()='CONTRACT' and @CATEGORY='ORIGINAL']//*

  16. XML с пространством имен и атрибутами <root> xmlns:xhtml="http://www.w3.org/1999/xhtml"<Child translate='1'>перевести это</Child>

    • импортировать элемент <Child>, если атрибут translate равен 1: //*[local-name()="Child"][@*[local-name()='translate']='1']

    • импортировать все элементы с атрибутом translate=true: //*[@*[local-name()='translate']='true']

  17. XML с пространством имен. Импортировать элемент target из элемента tu, но не когда атрибут id содержит 'img' или 'extra':

    1. Пример файла:

      <tu id="pages|content|extra"><ori xml:lang="en">Курс один</ori><target xml:lang="lang">Курс один</target></tu>

    2. Пример XPATH:

      //*[local-name()='tu' and not(contains(@id,'img') or contains(@id,'extra'))]/*[local-name()='target']

  18. Импортировать все элементы, кроме <comment> и <lis>, если только <lis translate="true"> и их потомки:

    //*[count(ancestor-or-self::node()[(name()='lis' and (not(@translate='true')) ) or name()='comment'])=0]

  19. Импортировать все элементы, кроме <comment> и кроме элементов с атрибутом <... attribute2="Не переводить"> и их потомков:

    //*[count(ancestor-or-self::node()[(@attribute2='Не переводить') or name()='comment'])=0]

  20. Импортировать значения атрибутов varName и glossName, но только если их предки имеют атрибут attribute1='translate' или attribute1='edit':

    //*[(self::node()[@attribute1='translate' or @attribute1='edit'])]//@*[local-name()='varName' or local-name()='glossName']

  21. Импортировать все элементы и атрибуты, кроме элементов с атрибутом 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'])]

    В этом случае может быть лучше импортировать все и заблокировать атрибуты, не требуемые для импорта. После того как сегменты будут заблокированы, скопируйте оригинал в перевод в редакторе, чтобы оригинал был перенесен в перевод.

    1. Заблокируйте все элементы с атрибутом Name со значениями: Назад, Меню или Время и их потомков:

      //*[@Name='Back' or @Name='Menu' or @Name='Time']/descendant-or-self::*

    2. Заблокируйте все атрибуты Name со значениями: Назад, Меню или Время и их потомков

      //*[@Name='Back' or @Name='Menu' or @Name='Time']//@*

Некоторые внешние примеры.

Контекстное примечание

Контекстные примечания могут быть импортированы в переведенные сегменты.

В этом примере три примера:

<?xml version-"1.0" encoding="utf-8"?>
<root>
<element context1="Примечание в атрибуте родительского элемента 1 - выберите ../@context1">
<field context2="Примечание в атрибуте 1 - выберите @context2" >для перевода1</field>
<context3>Примечание в элементе 1 - выберите ../context3</context3>
</element>

<element context1="Примечание в атрибуте родительского элемента 2">
<field context2="Примечание в атрибуте 2">для перевода2</field>
<context3>Примечание в элементе 2</context3>
</element>

</root>
  • Атрибут в родительском элементе (контекст 1): ../@context1

  • Атрибут в собственном элементе (контекст 2): @context2

  • Соседний элемент (контекст 3): ../context3

Если импортировать Элементы и атрибуты: //*, контент контекстного примечания также будет импортирован в сегменты источника. Исключить элементы/атрибуты контекстного примечания из общего импорта в Элементы и атрибуты.

Была ли эта статья полезной?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.