Skip to main content
On this page

@std/xml

Overview Jump to heading

XML parsing and serialization for Deno.

This module implements a non-validating XML 1.0 parser based on the W3C XML 1.0 (Fifth Edition) specification.

Parsing APIs

Two parsing APIs are provided for different use cases:

API Use Case Output
parse Parse a complete XML string Document tree
parseXmlStream Streaming with maximum throughput Direct callbacks

Quick Examples

DOM-style parsing

import { parse } from "@std/xml";
import { assertEquals } from "@std/assert";

const doc = parse("<root><item>Hello</item></root>");
assertEquals(doc.root.name.local, "root");

High-performance streaming with callbacks

For maximum throughput when processing large files:

import { parseXmlStream } from "@std/xml";

const response = await fetch("https://example.com/feed.xml");
const textStream = response.body!.pipeThrough(new TextDecoderStream());

let itemCount = 0;
await parseXmlStream(textStream, {
  onStartElement(name) {
    if (name === "item") itemCount++;
  },
});
console.log(`Found ${itemCount} items`);

Streaming with byte streams

For convenience with fetch responses:

import { parseXmlStreamFromBytes } from "@std/xml";

const response = await fetch("https://example.com/feed.xml");

await parseXmlStreamFromBytes(response.body!, {
  onStartElement(name) {
    console.log(`Element: ${name}`);
  },
});

Position Tracking

Both parsers support optional position tracking (line, column, offset) for debugging and error reporting:

  • DOM parser (parse): Position tracking is enabled by default to provide detailed error messages. Disable with { trackPosition: false } for a performance boost when parsing trusted XML.

  • Streaming parser (parseXmlStream): Position tracking is disabled by default for optimal streaming performance. Enable with { trackPosition: true } when you need position info.

Add to your project Jump to heading

deno add jsr:@std/xml

See all symbols in @std/xml on

Did you find what you needed?

Privacy policy