Expand description

XML Schema Generator

§Description

Parse an XML file and generate a Rust struct that can be used to deserialize the given XML (or serialize one)

§Examples

How to implement the lib

use quick_xml::reader::Reader;
use xml_schema_generator::{into_struct, Options};

let xml = "<xml>...</xml>";
let mut reader = Reader::from_str(xml);

if let Ok(root) = into_struct(&mut reader) {
    let struct_as_string = root.to_serde_struct(&Options::quick_xml_de());
    // save this result as a .rs file and use it to (de)serialize an XML document with quick_xml::de::from_str(xml)
}

// you can even parse additional xml files to extend the structure to match those files as well
// see examples/parse_multiple_xml_rs

You find more examples in the /examples directory

§Install

from source (env_logger is optional if you do not require additional output)

    cargo install xml_schema_generator --features="env_logger"

or download the latest binary at GitHub

How to run the binary

    Usage: [RUST_LOG=info] xml_schema_generator [OPTIONS] <INPUT_PATH> [OUTPUT_PATH]
     
    Arguments:
      <INPUT_PATH>
              xml file that shall be parsed
     
      [OUTPUT_PATH]
              rust file to store the result, or none to print to stdout
     
    Options:
      -p, --parser <PARSER>
              define the parser that is used to parse the resulting struct
               
              [default: quick-xml-de]
              [possible values: quick-xml-de, serde-xml-rs]
     
      -d, --derive <DERIVE>
              define the #derive attribute to be added to each resulting struct
               
              [default: "Serialize, Deserialize"]
     
      -s, --sort <SORT>
              sorting order for attributes and children
               
              [default: unsorted]
     
              Possible values:
              - unsorted: the order remains as found in document
              - name:     sort attributes and children by name (as given in XML). attributes and children are not merged
     
      -h, --help
              Print help (see a summary with '-h')
     
      -V, --version
              Print version

Structs§

  • represents the structure and characteristics of an XML element
  • configuration of target parser

Enums§

Functions§

  • merge two lists of necessities the result contains mandatory elements if they were present as mandatory in both given lists all other elements are returned as optional elements of the second list are appended to the first list