Skip to main content

Crate xml_arrow

Crate xml_arrow 

Source
Expand description

Convert XML records to Arrow batches with explicit or inferred schemas.

Use XmlBatchBuilder for record elements and XmlReader for documents. XmlReader::infer samples a document to infer its schema.

use arrow_schema::DataType;
use xml_arrow::{XmlBatchBuilder, XmlField, XmlSchema};

let schema = XmlSchema::new(vec![
    XmlField::new("id", "@id", DataType::Int64, false),
    XmlField::new("title", "title", DataType::Utf8, true),
])?;
let mut builder = XmlBatchBuilder::new(schema, 128)?;
builder.append_xml(r#"<book id="7"><title>Rust</title></book>"#)?;
let batch = builder.flush()?.unwrap();
assert_eq!(batch.num_rows(), 1);
assert_eq!(batch.num_columns(), 2);

Nested fields:

use arrow_schema::DataType;
use xml_arrow::{XmlBatchBuilder, XmlField, XmlSchema};
let schema = XmlSchema::new(vec![XmlField::list(
    "people", "people", false,
    XmlField::structure("item", "person", false, vec![
        XmlField::new("id", "@id", DataType::Int64, false),
    ]),
)])?;
let mut builder = XmlBatchBuilder::new(schema, 128)?;
builder.append_xml(r#"<r><people><person id="1"/><person id="2"/></people></r>"#)?;
assert_eq!(builder.flush()?.unwrap().num_rows(), 1);

Read a document:

use arrow_schema::DataType;
use futures_util::io::Cursor;
use xml_arrow::{ReaderOptions, XmlField, XmlReader, XmlSchema};
let schema = XmlSchema::new(vec![
    XmlField::new("id", "@id", DataType::Int64, false),
])?;
let mut reader = XmlReader::new(
    Cursor::new(b"<rows><row id='1'/><row id='2'/></rows>"),
    schema, "/rows/row", ReaderOptions::default(),
)?;
futures_executor::block_on(async {
    assert_eq!(reader.next_batch().await?.unwrap().num_rows(), 2);
    assert!(reader.next_batch().await?.is_none());
    xml_arrow::ReaderResult::Ok(())
})?;

Structs§

InferenceOptions
Bounds the records retained for schema inference.
NamespaceBinding
A schema prefix bound to a namespace URI.
ReaderOptions
Batch size, projection, and XML limits.
XmlBatchBuilder
Builds Arrow batches from complete XML record elements.
XmlField
An Arrow field with a relative XML path.
XmlReader
Reads XML records selected by an absolute path into Arrow batches.
XmlSchema
Validated column mappings and namespace bindings.

Enums§

Error
XML-to-Arrow conversion error.
Limit
XML input limit.
ReadError
XML reader error.

Type Aliases§

ReaderResult
Result with ReadError.
Result
Result with Error.