es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo crear XML a partir de una estructura en Rust?

Intento crear una cadena xml a partir de una estructura en Rust. La estructura está anidada y siempre obtengo etiquetas duplicadas en xml. Estoy usando serde-xml-rs version 0.5.1.

#[derive(Serialize, Debug)]
struct A {
   #[serde(rename(serialize = "B"))]
   pub b: B
}

#[derive(Serialize, Debug)]
struct B {
    pub c: String
}

let foo = A {
    b: B {
        c: "bar".to_string()
    }
};

println!("{:?}", to_string(&foo));

Esto produce

<a>
    <b>
        <b>
            <c>bar</c>
        </b>
    </b>
</a>

Lo que espero:

<a>
    <b>
        <c>bar</c>
    </b>
</a>

¿Cómo puedo obtener solo una etiqueta B?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para evitar etiquetas duplicadas en la salida XML, debes eliminar el atributo #[serde(rename(serialize = "B"))] del campo b en la estructura A. Este atributo está haciendo que la etiqueta B se serialice dos veces.

    Entonces, tu código actualizado se verá así:

    #[derive(Serialize, Debug)]
    struct A {
        pub b: B
    }
    
    #[derive(Serialize, Debug)]
    struct B {
        pub c: String
    }
    
    let foo = A {
        b: B {
            c: "bar".to_string()
        }
    };
    
    println!("{:?}", to_string(&foo));
    

    Esto ahora producirá la salida XML esperada:

    <a>
        <b>
            <c>bar</c>
        </b>
    </a>
    

Comments are closed.