如何修复Rust中yaml转xml代码的use of moved value报错
问题原因
你使用的xml-rs库中,StartElementBuilder的attr()方法是消费所有权的设计:每次调用该方法都会拿走当前builder实例的所有权,返回一个添加了对应属性后的新builder实例。你之前的代码中调用xml_event.attr(...)后没有接收返回的新实例,导致原xml_event被移动后直接失效,下一次循环再访问该变量就会触发use of moved value报错。
修改方案
只需要调整你属性赋值的循环逻辑,每次把attr()返回的新builder重新赋值给xml_event变量即可:
loop { let current_attribute_option = attributes.pop(); match current_attribute_option { Some(current_attribute) => { // 核心修改:接收attr返回的新builder实例,重新赋值给xml_event xml_event = xml_event.attr(current_attribute.attribute_name, current_attribute.attribute_value); }, None => break, }; }
另外你的代码中attribute_written_flag全程没有被赋值为true,会导致函数结尾的最后一个起始节点写入逻辑永远不会触发,建议根据你的业务逻辑补充对该变量的赋值,比如在属性添加完成后将其设为true。
其他注意点
代码中大量使用unwrap(),如果正则匹配失败会直接导致程序panic,生产环境建议替换为合适的错误处理逻辑。
内容的提问来源于stack exchange,提问作者defiant
相关产品推荐
相关产品推荐

