sort
语法
sort expression {; case-order "upper-first" | "lower-first"; data-type "text" | "number" | type-name; order "ascending" | "descending"; }
描述
控制 和for-each
apply-templates
语句循环访问当前节点列表的顺序。默认情况下,for-each
and apply-templates
语句会按文档顺序考虑节点,但该sort
语句在循环访问节点列表之前定义顺序。紧sort
跟在 or apply-templates
语句之后for-each
插入语句。sort
仅在首次启动循环时处理该语句。
该 sort
语句有一个可选的 XPath 表达式和三个可选参数: case-order
、 data-type
和 order
。XPath 表达式确定用于排序的每个节点的比较字符串。该脚本以节点作为其上下文计算表达式,然后将结果转换为该节点的比较字符串。如果未指定 XPath 表达式,则默认值为“.”,这将导致比较列表中每个节点的字符串内容。特定于 SLAX 的运算符(如 == 和 _)不能在表达式字符串中使用。 sort
如果语句不包含任何可选参数,则根据每个节点的字符串值对列表进行排序。
该sort
语句不会对底层 XML 数据结构进行永久排序,只会对 or apply-templates
语句使用的for-each
当前节点列表的顺序进行排序。可以将多个sort
语句分配给单个for-each
语句或语句apply-templates
。按顺序应用它们,直到发现差异。
属性
expression |
XPath 表达式,用于确定用于排序的每个节点的比较字符串。默认值为“.”。 |
case-order |
指定是先小写排序还是先大写排序。可接受的值为“低优先”或“高优先”。默认值为“上优先”。 |
data-type |
指定元素类型,该类型确定是执行数字、词法还是其他排序。可接受的值为“数字”和“文本”。默认值为“文本”。
|
order |
指定是按升序还是降序排序。可接受的值为“降序”或“升序”。默认值为“升序”。 |
SLAX 示例
以下示例 SLAX 脚本执行 Junos XML API get-interface-information
命令并解析生成的输出。循环打印 for-each
设备上每个物理接口的名称,按升序排序。
version 1.1; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; match / { <op-script-results> { var $results = jcs:invoke("get-interface-information"); for-each ($results/physical-interface/name) { sort . { data-type "text"; order "ascending"; } <interface-name> .; } } }
发布信息
SLAX 语言 1.1 版中引入的语句,Junos OS 12.2 版及更高版本中支持该语言。