XPath 概述
XSLT 使用 XML 路径语言 (XPath) 标准来指定和定位输入文档的 XML 层次结构中的元素。XPath 强大的表达式语法使您能够为选择 XML 输入文档的部分定义复杂的标准。
节点和轴
XPath 将文档层次结构的每一部分视为一个 节点。对于提交脚本、操作脚本、事件脚本和 SNMP 脚本,重要的节点类型是 元素节点、 文本节点和 属性节点。考虑以下 XML 标记:
<system> <host-name>my-router</host-name> <accounting inactive="inactive"> </system>
这些 XML 标记元素显示以下 XPath 节点类型的示例:
<host-name>my-router</host-name>
—元素节点my-router
- 文本节点inactive="inactive"
-属性节点
节点被视为被安排在特定 轴上。 祖先轴 从节点向上指向其父节点的一系列。 子轴 指向元素节点的直接子节点列表。 属性轴 指向元素节点属性集列表。 以下同级轴 指向跟随节点但位于同一父节点下的节点。 子体轴 包含一个节点的所有子体。这里没有列出许多其他轴。
每个 XPath 表达式都从特定节点进行评估,该节点称为 上下文节点 (或简称 上下文)。上下文节点是 XSLT 处理器当前查看的节点。XSLT 会随着文档的层次结构的遍历更改上下文,并从该特定上下文节点评估 XPath 表达式。
在 Junos OS 提交脚本中,上下文节点概念与 Junos OS 层次结构级别相对应。例如, /configuration/system/domain-name
XPath 表达式将上下文节点设置为 [edit system domain-name]
层级。
我们建议在所有<xsl:template match="configuration">
提交脚本中包含模板。此元素允许您在脚本中的编程指令(如或)中从所有 XPath 表达式中排除/configuration/
根元素,从而允许您在 Junos 层次结构级别开始 XPath 表达式(例如system/domain-name
)。<xsl:if>
<xsl:for-each>
有关更多信息,请参阅提交脚本所需的样板。
路径和谓词语法
XPath 表达式包含两种类型的语法:路径语法和谓词语法。路径语法从当前上下文节点的文档层次结构中的一个轴上指定要检查哪些节点的路径位置。以下是几个路径语法示例:
accounting-options
-选择作为当前上下文子节点的元素节点accounting-options
。server/name
-选择名为name
的元素节点,该节点是当前上下文的子元素。server
/configuration/system/domain-name
-选择名为domain-name
的元素节点,该节点是名为的元素system
的子元素,该元素是文档 ()configuration
根元素的子元素。parent::system/host-name
-选择名为host-name
的元素节点,该节点是当前上下文节点的父元素的system
子元素。轴parent::
可以缩写为两个句点 (..
)。
谓词语法允许您在路径语法选择的每个节点执行测试。结果集中仅包含通过测试的节点。谓语显示在路径节点后的方括号 ([ ]
) 内。以下是几个谓词语法的示例:
server[name = '10.1.1.1']
-选择名为server
当前上下文的子元素,并具有名为name
的子元素,其值为 10.1.1.1。*[@inactive]
-选择作为当前上下文子项且具有命名inactive
属性(从attribute
轴选择节点)的任何节点(*
@
匹配任何节点)。route[starts-with(next-hop, '10.10.')]
-选择一个名为route
的元素,该元素是当前上下文的子元素,其子元素名为next-hop
,其值以字符串 10.10 开头。该功能
starts-with
是 XPath 中内置的众多功能之一。XPath 还支持关系测试、平等测试以及此处未列出的许多其他功能。
XPath 运营商
XPath 支持标准逻辑运算符,例如 AND
和 |
(或);比较运算符,例如 =
、 !=
、 <
和 >
;以及数字运算符,如 +
、 -
和 *
。
在 XSLT 中,您始终必须将小于 (<
) 运算符表示为 <
和小于或等于 (<=
) 运算符表示为 <=
,因为 XSLT 脚本是 XML 文档,而小于符号则以 XML 方式表示。
有关 XPath 功能和运算符的更多信息,请参阅全面的 XPath 参考指南。 http://w3c.org/TR/xpath 的 W3C 规范中对 XPath 进行了充分描述。