XPath代表XML路径语言。它可以用于在XML文档中导航元素和属性。如果您是XPATH新手,请先查看XPath教程并学习官方XPATH文档。
AI聊天机器人在生成和验证Xpath方面非常有效。
支持XPath 1.0的一个子集,具有以下限制:
-
步骤中的轴
-
支持
祖先、祖先或自身、属性、子、后代、后代或自身
-
不支持
后续、前导、后续兄弟、前导兄弟、命名空间
-
-
谓词
-
支持
对当前节点或祖先节点及其属性(属性、命名空间)的条件
-
不支持(例如)
位置编号、轴child::、后代、后代或自身、following::、preceding::、following-sibling::、preceding-sibling::、函数last()
-
基本规则
-
在路径中使用
/和// -
在名称中使用单引号
' ' -
使用管道
|连接请求 -
名称区分大小写:
<Body>与<body>不同
示例
XPath 示例 1 和 XPath 示例 2 (带命名空间) 是以下示例文件:
-
导入所有元素和所有属性
//* | //@* -
导入所有元素和属性1的值
(<elem1 attribute1="translate" attribute2="不翻译"/>)//* | //@attribute1 -
导入子元素的所有后代
//Child//* -
仅在属性 translate='true' 时导入元素 lis 及其后代
(<lis translate="true">翻译这个</lis><lis translate="false">不翻译这个</lis>)//lis[@translate='true']/descendant-or-self::* -
如果元素的属性为 translate='true',则导入所有元素和后代
//*[@translate='true']/descendant-or-self::* -
导入元素 Data 中属性 Text 的值
<Data Text="翻译文本">//data/@text -
导入
<mT:translation>元素及其后代,除了元素<mT:ignore>//mT:translation/descendant-or-self::*[not(ancestor-or-self::mT:ignore)] -
排除所有属性为 translate='false' 的元素
//*[not(@translate='false')] -
排除属性为 translate='false' 的 'lis' 元素
(<lis translate="false">不翻译)//*[not(self::lis[@translate='false'])] -
排除属性为 translate='false' 的 'lis' 元素及其后代
(<lis translate="false"><p>不翻译)//*[not(ancestor-or-self::lis[@translate='false'])] -
排除所有包含 'link' 的元素
(<menu1link><tmenu41link>)//*[not(contains(name(),'link'))] -
如果它们或其祖先具有包含 'link' 的属性 'lis',则排除所有元素
(<ele lis=menu1link>, <mon lis=tmenu41link>)//*[not(ancestor-or-self::node()[contains(@lis, 'link')])] -
如果它们的父级 LANG 具有属性 'updated' 且年份为 2015,则导入元素 PT
(<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']//* -
仅在
<Child>中导入元素<Text>://*[local-name()='Child']/*[local-name()='Text'] -
如果属性
<CATEGORY>在<CONTRACT>中的值为<ORIGINAL>,则导入元素<CONTRACT>下的所有元素://*[local-name()='CONTRACT' and @CATEGORY='ORIGINAL']//*
-
-
带有命名空间和属性的 XML
<root>xmlns:xhtml="http://www.w3.org/1999/xhtml"<Child translate='1'>翻译这个</Child>-
如果属性 translate 为 1,则导入元素
<Child>://*[local-name()="Child"][@*[local-name()='translate']='1'] -
导入所有具有属性 translate=true 的元素:
//*[@*[local-name()='translate']='true']
-
-
带命名空间的XML。从元素
tu导入目标元素,但当属性 id 包含 'img' 或 'extra' 时不导入:-
文件示例:
<tu id="pages|content|extra"><ori xml:lang="en">课程一</ori><target xml:lang="lang">课程一</target></tu> -
XPATH 示例:
//*[local-name()='tu' and not(contains(@id,'img') or contains(@id,'extra'))]/*[local-name()='target']
-
-
导入所有元素,除了
<comment>和<lis>,除非<lis translate="true">及其后代://*[count(ancestor-or-self::node()[(name()='lis' and (not(@translate='true')) ) or name()='comment'])=0] -
导入所有元素,除了
<comment>和具有属性<... attribute2="不翻译">的元素及其后代://*[count(ancestor-or-self::node()[(@attribute2='不翻译') or name()='comment'])=0] -
导入属性
varName和glossName的值,但仅当它们的祖先具有属性attribute1='translate'或attribute1='edit'时://*[(self::node()[@attribute1='translate' or @attribute1='edit'])]//@*[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的所有属性,其值为:返回,菜单, 或时间及其后代//*[@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
如果导入元素和属性://*,上下文注释的内容也将导入到源段中。在元素和属性的一般导入中排除上下文注释元素/属性。