Type Reference
Element
The core type representing any node in the parsed tree (elements, text, comments, CDATA, processing instructions). All fields are optional — an element typically uses name, attributes, and elements:
interface Element {
declaration?: { attributes?: DeclarationAttributes };
instruction?: string;
attributes?: Attributes;
cdata?: string;
doctype?: string;
comment?: string;
text?: string | number | boolean;
type?: string;
name?: string;
elements?: Element[];
parent?: Element;
}
Text content
Text is not a separate node type. The text of <w:t>Hello</w:t> is stored on the element's own text field:
// parsed <w:t>Hello</w:t>
{ type: "element", name: "w:t", text: "Hello" }
Read it with textOf(element) (returns "" when absent). There is no TextElement interface.
Creating Elements
Put text directly on the element's text field — do not create { type: "text" } children:
const paragraph: Element = {
type: "element",
name: "w:p",
elements: [
{
type: "element",
name: "w:r",
elements: [{ type: "element", name: "w:t", text: "Hello World" }],
},
],
};
Attributes
interface Attributes {
[key: string]: string | number | undefined;
}
A simple key-value map for XML attributes.
DeclarationAttributes
Attributes of the XML declaration (<?xml version="1.0" encoding="UTF-8"?>):
interface DeclarationAttributes {
version?: string | number;
encoding?: string;
standalone?: string;
}
Option Types
The interfaces also retain several xml-js-style hook fields (textFn, cdataFn, etc.), but only the fields actually consumed by parse()/stringify() are listed below.
ParseOptions
Options for the parse() function:
interface ParseOptions {
trim?: boolean;
captureSpacesBetweenElements?: boolean;
nativeTypeAttributes?: boolean;
ignoreDeclaration?: boolean;
ignoreComment?: boolean;
ignoreCdata?: boolean;
ignoreDoctype?: boolean;
ignoreText?: boolean;
}
StringifyOptions
Options for the stringify() function:
interface StringifyOptions {
spaces?: number | string;
fullTagEmptyElement?: boolean;
indentText?: boolean;
indentCdata?: boolean;
ignoreDeclaration?: boolean;
ignoreComment?: boolean;
ignoreCdata?: boolean;
ignoreDoctype?: boolean;
ignoreText?: boolean;
attributeValueFn?: (
attributeValue: string,
attributeName: string,
currentElementName: string,
currentElementObj: Element,
) => string;
}