我使用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>
这是我的杨模型,例子。杨(为了简洁起见,我只粘贴了它的部分):
module example {
rpc action {
input {
leaf param2 {
type string
}
leaf param1 {
type string
}
}
}
yang2dsdl -t rpc example.yang 模式生成成功。
yang2dsdl -s -j -b example -t rpc -v example.xml
错误:元素“param1”尚未被允许;缺少必需的元素“param2”
虽然param1和param2在输入xml文件中,因为它们与YANG模型的顺序不同,但会抛出错误。
有人可以告诉我如何解决这个问题吗?
答案 0 :(得分:2)
似乎YANG RFC以rpcs和其他数据的形式对待子元素的顺序。在rpcs中,顺序必须与模型中的定义完全相同。在其他数据的情况下,子元素的顺序并不重要。
因此,在您的情况下,rpc输入不是根据YANG标准准备的,应该是固定的。 yang2dsdl工具运行得很好,你不应该期望有任何&#34;忽略rpcs&#34;选项。
输入参数被编码为子XML元素到rpc节点的XML元素,的顺序与它们在&#34;输入&#34;中定义的顺序相同。声明强>
如果RPC操作调用成功,并且没有返回输出参数,则&lt; rpc-reply&gt;包含单个&lt; ok /&gt; [RFC4741]中定义的元素。如果返回输出参数,则将它们编码为&lt; rpc-reply&gt;的子元素。 [RFC4741]中定义的元素,的顺序与它们在&#34;输出&#34;中定义的顺序相同。声明强>
容器的子节点被编码为容器元素的子元素。 如果容器定义了RPC输入或输出参数,则这些子元素的编码顺序与它们在&#34;容器中定义的顺序相同。声明即可。否则,子元素将按任何顺序编码。