0

我使用 pyang 的 yang2dsl 针对 yang 数据模型验证输入 xml 实例。但是,当 xml 实例中的参数顺序与 yang 模型中的不同时,它会引发错误。有没有一个选项可以让它忽略参数的顺序?这是我的 xml 代码(example.xml):

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="100">
<action>
<param1>aaa</param1>
<param2>bbb</param2>
</action>
</rpc>

这是我的 YANG 模型,example.yang(为简洁起见,我只粘贴了与之比较的部分):

module example {
    rpc action {
       input {
           leaf param2 {
               type string
           }
           leaf param1 {
               type string
           }
    }
}

yang2dsdl -t rpc example.yang 模式生成成功。

yang2dsdl -s -j -b 例子 -t rpc -v 例子.xml

错误:尚未允许元素“param1”;缺少必需的元素“param2”

虽然 param1 和 param2 在输入 xml 文件中,但由于它们的顺序与 YANG 模型中的顺序不同,因此会引发错误。

有人可以告诉我如何解决这个问题吗?

4

1 回答 1

2

似乎 YANG RFC 对 RPC 和其他数据的子元素顺序不同。在 rpcs 中,顺序必须与模型中定义的完全相同。在其他数据的情况下,子元素的顺序并不重要。

因此,在您的情况下,rpc 输入不是根据 YANG 标准准备的,应该修复。yang2dsdl 工具工作得很好,你不应该期望有任何“忽略 RPC 的顺序”选项。

rpc XML 映射规则

输入参数被编码为 rpc 节点的 XML 元素的子 XML 元素,其顺序与它们在“输入”语句中定义的顺序相同

如果 RPC 操作调用成功,并且没有返回输出参数,则 <rpc-reply> 包含 [RFC4741] 中定义的单个 <ok/> 元素。如果返回输出参数,它们将被编码为 [RFC4741]中定义的 <rpc-reply> 元素的子元素,其顺序与它们在“输出”语句中定义的顺序相同

容器 XML 映射规则

容器的子节点被编码为容器元素的子元素。如果容器定义了 RPC 输入或输出参数,则这些子元素的编码顺序与它们在“容器”语句中定义的顺序相同。否则,子元素以任何顺序编码。

于 2015-12-31T12:42:59.720 回答