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