🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@office-open/xml

Package Overview
Dependencies
Maintainers
1
Versions
56
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@office-open/xml

XML parsing and serialization for Office Open XML. Zero dependencies, drop-in replacement for xml + xml-js.

edge
latest
Source
npmnpm
Version
0.10.12
Version published
Weekly downloads
2.8K
260.51%
Maintainers
1
Weekly downloads
 
Created
Source

@office-open/xml

npm version npm downloads npm license zero dependencies

XML parsing and serialization for Office Open XML. Zero dependencies, drop-in replacement for xml + xml-js.

Features

  • Zero Dependencies - No external runtime dependencies, pure TypeScript implementation
  • xml() Serialization - Drop-in replacement for the xml package
  • xml2js() Parsing - Drop-in replacement for xml-js XML parsing
  • js2xml() Stringifying - Drop-in replacement for xml-js JS-to-XML conversion
  • toElement() Direct Convert - Direct conversion from xml object format to xml-js Element, 10-19x faster than the xml→xml2js bridge
  • Complete Type Definitions - Full type compatibility with xml and xml-js, import without changes
  • OOXML Optimized - Implements all options needed for Office Open XML document generation

Installation

# pnpm
pnpm add @office-open/xml

# npm
npm install @office-open/xml

# yarn
yarn add @office-open/xml

# bun
bun add @office-open/xml

Migration from xml + xml-js

Replace your existing imports:

// Before
import xml from "xml";
import { xml2js, js2xml } from "xml-js";
import type { Element } from "xml-js";

// After
import { xml, xml2js, js2xml } from "@office-open/xml";
import type { Element } from "@office-open/xml";

No other code changes needed. All options and output formats are compatible.

Quick Start

import { xml, xml2js, js2xml, toElement } from "@office-open/xml";

// Serialize JS objects to XML
const xmlStr = xml({ "w:p": [{ _attr: { "w:val": "1" } }, { "w:r": [{ "w:t": "Hello" }] }] });
// <w:p w:val="1"><w:r><w:t>Hello</w:t></w:r></w:p>

// Parse XML to JS objects
const parsed = xml2js("<w:t>Hello</w:t>", { compact: false });

// Convert JS objects back to XML
const output = js2xml(parsed);

// Direct conversion (faster than xml → xml2js bridge)
const element = toElement({
  "w:p": [{ _attr: { "w:val": "1" } }, { "w:r": [{ "w:t": "Hello" }] }],
});

API

xml(input, options?)

Serialize JavaScript objects to XML string. Compatible with the xml package.

xml2js(xmlString, options?)

Parse XML string to JavaScript object. Compatible with xml-js.

js2xml(jsObject, options?)

Convert JavaScript object (xml-js Element format) to XML string. Compatible with xml-js.

json2xml(jsObject, options?)

Alias for js2xml.

xml2json(xmlString, options?)

Convenience function that returns JSON.stringify(xml2js(xmlString, options)).

toElement(input)

Direct conversion from xml object format to xml-js Element format. Much faster than the xml() → xml2js() bridge path.

escapeXml(str) / escapeAttributeValue(str)

Low-level XML entity escaping functions.

Benchmark

Performance comparison against original xml (1.0.1) and xml-js (1.6.11) packages:

Serialization (xml)

Scenario@office-open/xmlxmlSpeedup
Simple element5,440,771 hz805,545 hz6.75x
Nested element1,050,272 hz315,184 hz3.33x
Nested with declaration967,945 hz275,684 hz3.51x

Parsing (xml2js)

Scenario@office-open/xmlxml-jsSpeedup
Simple XML869,965 hz100,507 hz8.66x
Complex OOXML346,440 hz53,621 hz6.46x
With captureSpaces344,586 hz52,414 hz6.57x

Stringifying (js2xml)

Scenario@office-open/xmlxml-jsSpeedup
Simple element793,710 hz207,730 hz3.82x
Complex OOXML366,515 hz135,815 hz2.70x

Direct Conversion (toElement vs bridge)

ScenariotoElement()xml() + xml2js() bridgeSpeedup
Simple15,471,913 hz1,073,016 hz14.42x
Nested4,278,499 hz441,468 hz9.69x

Bundle Size

@office-open/xmlxml + xml-js
gzip4.22 kB~15 kB

License

  • MIT © Demo Macro

Keywords

office-open

FAQs

Package last updated on 02 Jul 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts