我使用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>这是我的杨模型,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 example.xml
错误:尚不允许元素"param1“;缺少必需的元素"param2”
尽管param1和param2在输入xml文件中,但由于它们的顺序与YANG模型中的顺序不同,因此会抛出错误。
有人能告诉我如何解决这个问题吗?
发布于 2015-12-31 20:43:00
对于rpcs和其他数据,YANG RFC似乎以不同的方式处理子元素的顺序。在rpcs中,顺序必须与模型中定义的顺序完全相同。对于其他数据,子元素的顺序并不重要。
因此,在您的示例中,rpc输入不是根据YANG标准准备的,应该进行修复。yang2dsdl工具运行得很好,您不应该期望有任何“忽略rpcs的订单”选项。
输入参数被编码为rpc节点的元素的子XML元素,其顺序与在" Input“语句中定义的顺序相同。
如果RPC操作调用成功,并且没有返回任何输出参数,则包含在RFC4741中定义的单个元素。如果返回输出参数,它们将被编码为RFC4741,中定义的元素的子元素,其顺序与在" output“语句中定义的顺序相同。
容器的子节点被编码为容器元素的子元素。如果容器定义了RPC输入或输出参数,则这些子元素的编码顺序与在“容器”语句中定义的顺序相同。否则,子元素将以任何顺序进行编码。
https://stackoverflow.com/questions/32729651
复制相似问题