Loading page…
Loading page…
Large XML · Converter SDK
Stream records as they arrive, customize your processing, and keep your interface responsive.
Process incrementally with configurable engine budgets, without loading the whole file into memory.
See throughput and time to first record on your own device.
Choose records, map fields, validate values, and await your destination.
Hosted XML → Your browser → CSV records
11.48 GB · 45 million records
Synthetic Apple Health dataset
Connecting to dataset…
A safety ceiling, not reserved RAM. Small records can run at the same speed under every preset.
Parsing workers
More workers use more CPU and memory. The engine budget applies per converter; parallel queues have a separate 32 MiB payload limit. Measure the tradeoff on your device.
11.48 GB network transfer · pause or cancel anytime
Extracts Record attributes: type, value, unit, startDate and endDate. Unit is optional.
Simulate a slow destination. Processing waits for each write.
Ready
Timings include network, processing, receiver delay and pauses.
UI responsiveness · —
Samples arrive asynchronously and can take several seconds. Measurement overhead is included in timings.
Browser estimate for this page and its workers, not process RAM or exact converter usage. Dashed line: pre-processing baseline. Garbage collection affects readings; sampled peaks can miss brief spikes.
Start processing to measure your browser.
Preview only: keeps a short CSV excerpt, then discards further output.
Deterministic synthetic data with a repeating 4,096-record cycle. Extracts Record elements, including measurements and categorical sleep values; this is not a complete Apple Health importer. Workouts, routes and clinical files are excluded. Retained attribute entity references remain literal.
Choose XML elements and attributes, map fields, set batch sizes, and await asynchronous callbacks. Add schema validation and rejected-record handling when you need them.
Parse a local Apple Health XML file with your selected memory budget. The live demo also maps fields and serializes CSV.
import { stream } from '@diakrio/converter/browser';
// file is a File from your file input.
const run = stream(file, {
maxMemoryMB: 50,
inputChunkBytes: 65536,
xmlConfig: { recordElement: 'Record', includeAttributes: true },
// Receive records in batches; return a Promise to await your work.
onRecords(controller, records, stats) {
console.log(records, stats);
},
});
await run.done;The live demo runs inside a Web Worker to keep the interface responsive. The complete project includes that setup.