访问列表Yang中的叶子的xpath是什么



我有这个杨模型:

container x {
list y{
key "a"
leaf a{
}
leaf b{
}
}
}

我该如何访问一个叶,例如b叶,它不是x/y{value a}/b吗?或者x/y/b我尝试了很多xpath组合,但都不起作用——这只是我最聪明的两个组合。请帮我举几个例子。谢谢

x/y[a='value']/bx/y/b这样的表达式不能在任何地方为示例模块定义并返回有意义的结果。它们表示相对表达式,并且这些表达式总是依赖于它们的初始上下文节点(为其定义它们的模式节点(。例如,如果您将must(XPath(表达式定义为y列表的子语句,则该列表是您的初始上下文节点,并且该表达式相对于它进行解析。

由于x是顶级节点,因此不能用它来启动相对表达式——这意味着必须将表达式(mustwhen(定义为module语句的子语句,这是不允许的。这就是为什么存在绝对路径:/x/y/b。对于这样的表达式,初始上下文节点始终是文档根节点,因为第一个斜杠(/(会选择它。文档根节点可能会将x作为模块的子节点。

相对(或绝对(XPath表达式(如x/y/b(实际上是以下表达式的缩写形式:child::x/child::y/child::b。所有的路径表达式实际上都是由部分组成的(斜线之间的部分(,称为"步骤",所有步骤至少有两个组件:

  • 节点测试,分别是xyb。它们匹配节点名称
  • 一个轴,这就是child::。一个轴为选择哪些节点(子节点、兄弟节点、父节点等(提供了额外的指导。即使一个步骤没有明确定义轴,它也将默认为child::,它在当前节点上下文中选择节点的子节点

步骤的全部目的是从当前节点上下文中选择/筛选节点。以下是x/y/b用通俗英语所说的:首先,给我初始上下文节点的所有子节点,它们被命名为x,并将它们放入当前节点上下文中。然后选择当前节点上下文中节点的所有子节点,命名为y,并用它们替换当前节点上下文的所有节点。然后选择当前节点上下文中节点的所有子节点,命名为b,并用它们替换当前节点上下文的所有节点。当前节点上下文中的节点是表达式的结果。

考虑到所有这些,这里有几个例子:

  • when "../a='value'";,定义为leafb的子级
  • must "b > 25";被定义为listy的子级
  • must "y[a='key1']/b";,定义为containerx的子级

注意:YANG中的所有XPath表达式都是在服务器/客户端运行时计算的,并针对实例化的数据节点树(也称为可访问树(应用。不能使用XPath表达式选择架构节点,只能选择实例化的数据节点!

最新更新