Импорт утилит

XPath (TMS)

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

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

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

  • Ось на этапе

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

      предок, предок-или-я, атрибут, дитя, потомок, потомок-или-я

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

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

  • Предикат

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

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

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

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

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

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

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

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

  • Имена учитывают регистр: <тело{ отличается от <тела>

Примеры

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

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

    //* | //@*

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

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

    //* | //@attribute1

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

    //Child//*

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

    (<lis translation="true">translate this</lis><lis translation="false">not translate this</lis>)

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

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

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

  6. Импорт значения атрибута Текст в элементе Данные

    <Data Text="Text for translation">

    //data/@text

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

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

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

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

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

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

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

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

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

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

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

    (<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 имеет атрибут «обновлен» с 2015 годом

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

    //LANG[содержит(@updated,'2015')]/PT

  14. Импортировать элементы «Описание» и «Имя», только если они не являются потомками элементов «Определения» или «Типы»

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

    [(name()='Description') или (name()='Name')]

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

    <root xmlns:xhtml="http://www.w3.org/1999/xhtml"><Child><Text>translate this</Text></Child>

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

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

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

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

    • импортировать все элементы в рамках элемента <CONTRACT>, если атрибут <КАТЕГОРИЯ> в <CONTRACT> имеет значение <ORIGINAL>

      @CATEGORY='ORIGINAL']//*

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

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

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

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

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

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

    2. Пример XPATH:

      //*[local-name()='tu' and not(содержит(@id,'img') или содержит(@id,'extra'))]/*[local-name()='target']

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

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

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

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

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

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

  21. Импортировать все элементы и атрибуты, кроме элементов с атрибутом Имя= Назад, Меню или Время:

    //*[not(ancestor-or-self::node()[@Name='Back' или @Name='Menu' или @Name='Time'])] | //@*[not(ancestor-or-self::node()[@Name='Back' или @Name='Menu' или @Name='Time'])]

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

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

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

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

      //*[@Name='Back' или @Name='Menu' или @Name='Time']//@*

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

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

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

В этом образце три примера:

<?xml версия-"1.0" кодировка="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

  • Атрибут в элементе self (context2): @context2

  • Родственный элемент (контекст 3):.../context3

При импорте элементов и атрибутов: //* содержимое контекстного примечания также будет импортировано в исходные сегменты. Исключите элементы/атрибуты контекстных примечаний из общего импорта в Elements&Attributes.

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

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.