export interface XmlNode { /** Clark-notation qualified name: `{namespace}local` or just `local`. */ name: string; /** Attribute table; values are always strings (no value coercion at this layer). */ attrs: Record; /** * Optional element text. When an element has both text and child elements, * callers should set `text` and rely on `children` for mixed content; the * serializer emits `text` then children. */ text?: string; /** Child element nodes in document order. */ children: XmlNode[]; } /** * Build an XmlNode from primitive bits. Attributes / children default to empty; * pass `undefined` for `text` to omit the text node. * * The element's name is always supplied in Clark notation. Use the {@link * qname} helper from `./namespaces` to keep call sites readable. */ export declare function el(name: string, attrs?: Readonly>, children?: ReadonlyArray, text?: string): XmlNode; /** * Convenience: element with a Clark-notation name composed from a namespace URI * and local name. */ export declare function elNs(namespace: string | undefined, local: string, attrs?: Readonly>, children?: ReadonlyArray, text?: string): XmlNode; /** Locate the first child matching the supplied Clark-notation name. */ export declare function findChild(node: XmlNode, name: string): XmlNode | undefined; /** All children matching the supplied Clark-notation name, in document order. */ export declare function findChildren(node: XmlNode, name: string): XmlNode[]; /** * Append `child` to `parent`. Mutates and returns `parent` for chaining during * construction. Avoid in hot paths — for cell writing the worksheet writer goes * through a templated emitter rather than building XmlNode trees per cell. */ export declare function appendChild(parent: XmlNode, child: XmlNode): XmlNode;