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.
XmlRecord
One selected XML record, ready for independent Arrow conversion.
XmlSchema
Validated column mappings and namespace bindings.

Enums§

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

Functions§

infer_records
Infer reusable XML mappings from a bounded sample, then replay every raw record.
read_records
Stream complete XML records without converting field values to Arrow.

Type Aliases§

ReaderResult
Result with ReadError.
Result
Result with Error.