X 路径代表 XML 路径语言。它可用于浏览 XML 文档中的元素和属性。如果初次使用XPATH,首先请参阅 ⁇ XPath教程 ⁇ 并学习官方的 ⁇ XPATH文档。
AI 聊天机器人在生成和验证 X 路径时效果非常好。
XPath 1.0 的子集受以下限制:
-
步骤中的轴
-
支持的
祖先, 祖先-还是-自我, 属性, 子, 后代, 后代-还是-自我
-
不支持
以下,前面,以下同胞,前面同胞,名称空间
-
-
谓语
-
支持的
当前节点或祖先节点及其属性(属性、名称空间)的条件
-
不支持(例如)
位置号,轴子::,子孙,子孙或自我,以下::,前面::,后面-同胞::,前面-同胞::,函数最后()
-
基本规则
-
在路径中使用
/
和//
-
在名称中使用单引号
“”
-
使用管道
|
合并请求 -
名称区分大小写:
<Body>
与<body>
不同
示例
XPath 示例 1 ⁇ 和 ⁇ XPath 示例 2 ⁇ (带命名空间)是以下文件的示例:
-
导入所有元素和所有属性
//* | //@*
-
导入所有元素和属性值1
(<elem1 attribute1 = "翻译" attribute2 = "不翻译"/>)
//* | //@attribute1
-
导入子元素的所有后代
//Child//*
-
导入元素列表及其后代仅当属性 translate='true'
(<lis translate="true">翻译这个</lis><lis translate="false">不要翻译这个</lis>)
//lis[@translate='true']/descendant-or-self::*
-
如果该元素的属性被翻译='true',则导入所有元素及其后代
//*[@translate='true']/descendant-or-self::*
-
导入元素 Data 中属性 Text 的值
<数据文本 = "用于翻译的文本">
//data/@text
-
导入
<机器翻译>
元素及其后代,元素<机器翻译:略过>
除外//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'])]
-
排除所有包含“链接”的元素
(<menu1link><tmenu41link>)
//*[not(contains(name(),'link'))]
-
排除所有元素,如果它们或其祖先具有包含“链接”的属性“列表”
(<ele lis=menu1link>, <mon lis=tmenu41link>)
//*[not(ancestor-or-self::node()[contains(@lis, 'link')])]
-
导入元素 PT,如果它们的父 LANG 的属性是 2015 年的“已更新”
(<LANG updated="20150213T121526"><PT>'
//LANG[contains(@updated,'2015')]/PT
-
导入元素“描述”和“名称”只有当它们不是元素“定义”或“类型”的后代
://*[not(ancestor-or-self::*[(name()='Definitions') or (name()='Types')]/*
[(name()='描述')或(name()='名称')]
-
带名称空间的 XML
<root xmlns:xhtml="http://www.w3.org/1999/xhtml"><Child><Text>translate this</Text></Child>
-
导入
<子>
中所有元素://*[local-name()='Child']//*
-
只导入
<子><
中元素<文本>
://*[local-name()='Child']/*[local-name()='Text']
-
导入元素
<CONTRACT>
下的所有元素,如果<CONTRACT>
中的属性<CATEGORY>
值<ORIGINAL>
://*[local-name()='CONTRACT' and @CATEGORY='ORIGINAL']//*
-
-
带有名称空间和属性的 XML
<root>
xmlns:xhtml="http://www.w3.org/1999/xhtml"<子翻译='1'>翻译这个</子>
-
导入元素
<子>
如果翻译的属性是1://*[local-name()=“子”][@*[local-name()=“翻译”]=“1”]
-
导入所有属性为 translate=true 的元素:
//*[@*[local-name()='translate']='true']
-
-
带有名称空间的 XML。从元素
tu
导入译文,但当属性ID包含“img”或“extra”时则不会:-
文件示例:
<tu ⁇ ID="页面|内容|额外"><ori ⁇ xml:lang="en">课程一</ori><译文 ⁇ xml:lang="lang">课程一</译文></tu>
-
XPATH 示例:
//*[local-name()='tu' 而不是(包含(@id,'img')或包含(@id,'extra'))]/*[local-name()='译文']
-
-
导入除
<备注>
和<lis>
之外的所有元素,除非<lis translate="true">
及其后代://*[count(ancestor-or-self::node()[(name()='lis' and (not(@translate='true')) 或 name()='comment'])=0]
-
导入除
<备注>
和属性为<...属性2="不翻译">
的元素及其后代之外的所有元素://*[count(ancestor-or-self::node()[(@attribute2='Do not translate') or name()='comment'])=0]
-
导入属性
varName
和glossName
的值,但仅当其祖先具有属性attribute1='翻译'
或属性1='编辑'
时://*[(self::node()[@attribute1='翻译'或 @attribute1='编辑']]//@*[local-name()='varName'或local-name()='glossName']
-
导入所有元素和属性,属性
为名称=返回
、菜单
或时间
的元素除外://*[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
的元素:返回
、菜单
、时间
及其后代://*[@名称='返回'或 @名称='菜单'或 @名称='时间']/descendant-or-self::*
-
使用 值锁定
Name
的所有属性:返回
、菜单
、时间
及其后代//*[@名称='返回'或 @名称='菜单'或 @名称='时间']//@*
-
一些外部实例。
上下文注释
上下文注释可以导入已翻译的句段。
这个例子中有三个例子:
<?xml version-"1.0" encoding="utf-8"?> <root> <元素上下文1=" parent元素1属性中的注释 - 选择 ../@context1"> <field context2="属性 1 中的注释 - 选择 @context2" >用于翻译1</field> <context3>元素1中的注释 - 选择../context3</context3> </element> <元素上下文1=" parent元素2属性中的注释"> <field context2="属性 2 中的注释">用于翻译2</field> <context3>元素2注释</context3> </element> </root>
-
父元素(上下文1)中的属性:../@context1
-
自我元素(context2)中的属性: @context2
-
同胞元素(上下文3):../context3
如果导入元素/属性://*
,上下文注释的内容也将被导入原文/源语句段。从元素和属性的一般导入中排除上上下文注释元素/属性。