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="Do not translate"/>)//* | //@attribute1 -
导入子元素的所有后代
//Child//* -
仅在属性translate='true'时导入元素lis及其后代
(<lis translate="true">translate this</lis><lis translate="false">do not translate this</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'的元素'lisi'
(<lis translate="false">不翻译)//*[not(self::lis[@translate='false'])] -
排除属性translate='false'的元素'lisi'及其后代
(<lis translate="false"><p>Do not translate)//*[not(ancestor-or-self::lis[@translate='false'])] -
排除所有包含'link'的元素
(<menu1link><tmenu41link>)//*[not(contains(name(),'link'))] -
如果它们或它们的祖先有属性'lisi'包含'link',则排除所有元素
(<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 -
仅在元素 'Definitions' 或 'Types' 的后代中不包含时导入元素 'Description' 和 'Name'
://*[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>translate this</Text></Child>-
导入
<Child>中的所有元素://*[local-name()='Child']//* -
仅导入
<Text>中的元素到<Child>://*[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导入元素target,但当属性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="Do not translate">的元素及其后代://*[count(ancestor-or-self::node()[(@attribute2='Do not translate') 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的元素,其值为:Back、Menu或Time及其后代//*[@Name='Back' or @Name='Menu' or @Name='Time']//@*
-
一些外部 examples。
上下文注释
上下文注释可以导入到翻译段落中。
这个示例中有三个例子:
<?xml version-"1.0" encoding="utf-8"?> <root> <element context1="父元素 1 的属性中的注释 - 选择 ../@context1"> <field context2="属性 1 中的注释 - 选择 @context2" >用于翻译1</field> <context3>元素 1 中的注释 - 选择 ../context3</context3> </element> <元素 context1="父元素 2 的注释"> <字段 context2="属性 2 的注释">用于翻译2</字段> <上下文3>元素 2 的注释</上下文3> </element> </根>
-
父元素中的属性(上下文 1):../@context1
-
自身元素中的属性(上下文2):@context2
-
兄弟元素(上下文 3):../context3
如果导入 元素和属性://* 上下文注释的内容也将导入到源段中。在元素和属性的一般导入中排除上下文注释元素/属性。