Importar utilidades

XPath (TMS)

El contenido se traduce automáticamente del inglés por Phrase Language AI.

XPath significa XML Path Language. Se puede usar para navegar a través de elementos y atributos en un documento XML. Si es nuevo en XPATH, consulte primero el Tutorial de XPath y estudie la documentación oficial de XPATH.

Los chatbots de IA pueden ser muy efectivos para generar y verificar Xpath.

Un subconjunto de XPath 1.0 tiene compatibilidad con las siguientes limitaciones:

  • Eje en el paso

    • Compatibilidad:

      ancestor, ancestor-or-self, attribute, elemento secundario, descendant, descendant-or-self

    • Sin compatibilidad:

      following, preceding, following-sibling, preceding-sibling, namespace

  • Predicado

    • Compatibilidad:

      condiciones en el nodo actual o en los nodos ancestros y sus propiedades (atributos, espacios de nombres)

    • Sin compatibilidad (por ejemplo):

      número de posición, eje child::, descendant, descendant-or-self, following::, preceding::, following-sibling::, preceding-sibling::, función last()

Reglas básicas

  • Usar / y // en las rutas

  • Usar comillas simples ' ' en los nombres

  • Usar una barra vertical | para unir las solicitudes

  • Los nombres distinguen entre mayúsculas y minúsculas: <Body> es diferente de <body>

Ejemplos

Ejemplo de XPath 1 y Ejemplo de XPath 2 (con espacio de nombres) son archivos de ejemplo para lo siguiente:

  1. Importar todos los elementos y todos los atributos

    //* | //@*

  2. Importar todos los elementos y el valor de attribute1

    (<elem1 attribute1="translate" attribute2="Do not translate"/>)

    //* | //@attribute1

  3. Importar todos los descendientes de elementos elemento secundario

    //Child//*

  4. Importar un elemento lis y sus descendientes solo si el atributo translate='true' 

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

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

  5. Importar todos los elementos y elementos secundarios si el atributo del elemento es translate='true'

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

  6. Importar el valor del atributo Text en el elemento Data

    <Data Text=\"Text for translation\">

    //data/@text

  7. Importar el elemento <MT:translation> y sus elementos secundarios, excepto el elemento <MT:ignore>

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

  8. Excluir todos los elementos con el atributo translate='false'

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

  9. Excluir elementos 'lis' con el atributo translate='false'

    (<lis translate=\"false\">Do not translate)

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

  10. Excluir elementos 'lis' con el atributo translate='false' y sus descendientes

    (<lis translate=\"false\"><p>No traducir)

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

  11. Excluir todos los elementos que contengan 'link'

    (<menu1link><tmenu41link>)

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

  12. Excluir todos los elementos si ellos o su elemento raíz tienen un atributo 'lis' que contenga 'link'

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

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

  13. Importar elementos PT si su elemento raíz LANG tiene el atributo 'updated' con el año 2015

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

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

  14. Importar elementos 'Description' y 'Name' solo si no son elementos secundarios de los elementos 'Definitions' o 'Types'

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

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

  15. XML con espacio de nombres

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

    • importar todos los elementos en <Child>:

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

    • importar solo elementos <Text> en <elemento secundario>:

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

    • importar todos los elementos bajo el elemento <CONTRACT>, si el atributo <CATEGORY> en <CONTRACT> tiene el valor <ORIGINAL>

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

  16. XML con espacio de nombres y atributos <root> xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"<elemento secundario translate='1'>translate this</elemento secundario>

    • importar elemento <elemento secundario> si el atributo translate es 1: //*[local-name()=\"elemento secundario\"][@*[local-name()='translate']='1']

    • importar todos los elementos con el atributo translate=true: //*[@*[local-name()='translate']='true']

  17. XML con espacio de nombres. importar el elemento meta desde el elemento tu, pero no cuando el atributo ID contiene 'img' o 'extra':

    1. Ejemplo de archivo:

      <tu id=\"pages|contenido|extra\"><ori xml:lang=\"en\">Course one</ori><meta xml:lang=\"lang\">Course one</meta></tu>

    2. Ejemplo de XPATH:

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

  18. importar todos los elementos excepto <comentar> y <lis> a menos que <lis translate=\"true\"> y sus descendientes:

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

  19. importar todos los elementos excepto <comentar> y excepto elementos con el atributo <... attribute2=\"Do not translate\"> y sus descendientes:

    //*[count(ancestor-or-self::node()[(@attribute2='Do not translate') or name()='comentar'])=0]

  20. importar valores de atributos varName y glossName pero solo si sus ancestros tienen el atributo attribute1='importar' o attribute1='Editar':

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

  21. importar todos los elementos y atributos excepto elementos con el atributo Name= Back, Menu, o 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'])]

    En este caso puede ser mejor importar todo y dejar bloqueado los atributos que no se requieren para importar. Una vez que los segmentos estén bloqueado, copie la fuente a la meta en el editor con el fin de que el original se transfiera a la traducción.

    1. Bloquee todos los elementos con el atributo Name con valores: Back, Menu o Time y sus descendientes:

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

    2. Bloquee todos los atributos de Name con valores: Back, Menu o Time y sus descendientes

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

Algunos ejemplos externos.

Nota de contexto

Las nota de contexto se pueden importar en los segmentos traducidos.

Hay tres ejemplos en esta muestra:

<?xml version=\"1.0\" encoding=\"utf-8\"?>
<root>
<element context1=\"Nota en atributo de elemento raíz 1 - Seleccionar ../@context1\">
<field context2=\"Nota en atributo 1 - Seleccionar @context2\" >para traducción1</field>
<context3>Nota en elemento 1 - Seleccionar ../context3</context3>
</element>

<element context1=\"Nota en atributo de elemento raíz 2\">
<field context2=\"Nota en atributo 2\">para traducción2</field>
<context3>Nota en elemento 2</context3>
</element>

</root>
  • Atributo en elemento raíz (nota de contexto 1): ../@context1

  • Atributo en el elemento self (nota de contexto2): @context2

  • Elemento hermano (nota de contexto 3): ../context3

Si importa Elements&Attributes: //*, el contenido de la nota de contexto también se importará a los segmentos fuente. Excluir los elementos/atributos de la nota de contexto de la importación general en Elements&Attributes.

¿Fue útil este artículo?

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.