相关疑难解决方法(0)

在 Rust 中使用 Serde 反序列化递归 XML

我正在尝试使用 Rust 中的 Serde 和 Quick-XML 反序列化 MathML。由于 MathML 的递归性质,我在尝试编写结构时遇到了麻烦。这是一个最小的、可重现的示例:

use quick_xml;
use serde::Deserialize;

#[derive(Debug, Deserialize)]
#[serde(rename = "math", rename_all = "camelCase")]
pub enum MathNode {
    Apply(Vec<MathNode>),
    Ci(Vec<MathNode>),
    Text(String),
    #[serde(rename = "math")]
    Root(Vec<MathNode>),
}

pub fn parse(doc: &str) -> Result<MathNode, quick_xml::DeError> {
    let raw_model = quick_xml::de::from_str(doc);
    raw_model
}

pub fn main() {
    let test = "<math>
                    <apply>
                        <ci type=\"integer\">5</ci>
                    </apply>
                </math>";
    let parsed = parse(test);
    println!("{:?}", parsed);
}
Run Code Online (Sandbox Code Playgroud)

存在堆栈溢出,可能是由于此处此处建议的无限循环所致。我尝试实施他们的建议,但没有成功。

xml mathml xml-deserialization rust serde

5
推荐指数
1
解决办法
4317
查看次数

Rust中的Rudimentary Tree和Pointers

来自脚本语言背景和一些C,试图"学习"Rust让我质疑我的能力.我正在试图找出如何更改自有指针,并努力做到这一点.

除了从额外的lib中复制之外,我无法弄清楚我在二叉树上需要的递归.特别是,我不知道如何换出指针分支.虽然使用链表我可以作弊并使用临时向量来返回一个新列表,或者在列表头前添加一个新的Cons(值,~Cons),但是分支让我感到困惑.

enum NaiveTreeNode {
    NNil,
    NNode(~NaiveTreeNode, ~NaiveTreeNode, int, char) 
    //         left            right          key   val
}

impl NaiveTreeNode {
  fn eq(first_node: &NaiveTreeNode, second_node: &NaiveTreeNode) -> bool {
      match (first_node, second_node) {
          (&NNil, &NNil)              => true,
          ( &NNode( ~ref left_lval, ~ref left_rval, left_leafkey, left_leafval ),
            &NNode( ~ref right_lval, ~ref right_rval, right_leafkey, right_leafval )
          ) if left_leafkey == right_leafkey && left_leafval == right_leafval => {
              NaiveTreeNode::eq(left_lval, right_lval) && NaiveTreeNode::eq(left_rval, right_rval)
          },
          _                           => false
      }
  }

  fn add_branch(&mut self, node_to_add: ~NaiveTreeNode) { …
Run Code Online (Sandbox Code Playgroud)

recursion binary-tree rust

3
推荐指数
1
解决办法
1270
查看次数

标签 统计

rust ×2

binary-tree ×1

mathml ×1

recursion ×1

serde ×1

xml ×1

xml-deserialization ×1