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:
-
Importar todos los elementos y todos los atributos
//* | //@* -
Importar todos los elementos y el valor de attribute1
(<elem1 attribute1="translate" attribute2="Do not translate"/>)//* | //@attribute1 -
Importar todos los descendientes de elementos elemento secundario
//Child//* -
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::* -
Importar todos los elementos y elementos secundarios si el atributo del elemento es translate='true'
//*[@translate='true']/descendant-or-self::* -
Importar el valor del atributo Text en el elemento Data
<Data Text=\"Text for translation\">//data/@text -
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)] -
Excluir todos los elementos con el atributo translate='false'
//*[not(@translate='false')] -
Excluir elementos 'lis' con el atributo translate='false'
(<lis translate=\"false\">Do not translate)//*[not(self::lis[@translate='false'])] -
Excluir elementos 'lis' con el atributo translate='false' y sus descendientes
(<lis translate=\"false\"><p>No traducir)//*[not(ancestor-or-self::lis[@translate='false'])] -
Excluir todos los elementos que contengan 'link'
(<menu1link><tmenu41link>)//*[not(contains(name(),'link'))] -
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')])] -
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 -
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')] -
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']//*
-
-
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']
-
-
XML con espacio de nombres. importar el elemento meta desde el elemento
tu, pero no cuando el atributo ID contiene 'img' o 'extra':-
Ejemplo de archivo:
<tu id=\"pages|contenido|extra\"><ori xml:lang=\"en\">Course one</ori><meta xml:lang=\"lang\">Course one</meta></tu> -
Ejemplo de XPATH:
//*[local-name()='tu' and not(contains(@ID,'img') or contains(@ID,'extra'))]/*[local-name()='meta']
-
-
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] -
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] -
importar valores de atributos
varNameyglossNamepero solo si sus ancestros tienen el atributoattribute1='importar'oattribute1='Editar'://*[(self::node()[@attribute1='importar' or @attribute1='Editar'])]//@*[local-name()='varName' or local-name()='glossName'] -
importar todos los elementos y atributos excepto elementos con el atributo
Name= Back,Menu, oTime://*[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.
-
Bloquee todos los elementos con el atributo
Namecon valores:Back,MenuoTimey sus descendientes://*[@Name='Back' or @Name='Menu' or @Name='Time']/descendant-or-self::* -
Bloquee todos los atributos de
Namecon valores:Back,MenuoTimey 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.