
Company News
Andrew Becherer Joins Socket as Chief Information Security Officer
Socket’s first CISO brings deep experience securing high-growth SaaS companies as open source supply chain threats accelerate.
@office-open/xml
Advanced tools
XML parsing and serialization for Office Open XML. Zero dependencies, drop-in replacement for xml + xml-js.
XML parsing and serialization for Office Open XML. Zero dependencies, drop-in replacement for xml + xml-js.
xml packagexml-js XML parsingxml-js JS-to-XML conversionxml and xml-js, import without changes# Install with npm
$ npm install @office-open/xml
# Install with pnpm
$ pnpm add @office-open/xml
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.
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" }] }],
});
Serialize JavaScript objects to XML string. Compatible with the xml package.
Parse XML string to JavaScript object. Compatible with xml-js.
Convert JavaScript object (xml-js Element format) to XML string. Compatible with xml-js.
Alias for js2xml.
Convenience function that returns JSON.stringify(xml2js(xmlString, options)).
Direct conversion from xml object format to xml-js Element format. Much faster than the xml() → xml2js() bridge path.
Low-level XML entity escaping functions.
Performance comparison against original xml (1.0.1) and xml-js (1.6.11) packages:
| Scenario | @office-open/xml | xml | Speedup |
|---|---|---|---|
| Simple element | 5,177,260 hz | 788,296 hz | 6.57x |
| Nested element | 931,473 hz | 283,093 hz | 3.29x |
| Nested with declaration | 871,188 hz | 252,580 hz | 3.45x |
| Scenario | @office-open/xml | xml-js | Speedup |
|---|---|---|---|
| Simple XML | 1,007,094 hz | 91,782 hz | 10.97x |
| Complex OOXML | 340,595 hz | 49,733 hz | 6.85x |
| With captureSpaces | 314,648 hz | 44,190 hz | 7.12x |
| Scenario | @office-open/xml | xml-js | Speedup |
|---|---|---|---|
| Simple element | 712,314 hz | 182,865 hz | 3.90x |
| Complex OOXML | 333,739 hz | 125,132 hz | 2.67x |
| Scenario | toElement() | xml() + xml2js() bridge | Speedup |
|---|---|---|---|
| Simple | 13,922,735 hz | 1,083,869 hz | 12.85x |
| Nested | 3,799,372 hz | 436,241 hz | 8.71x |
| @office-open/xml | xml + xml-js | |
|---|---|---|
| gzip | 4.22 kB | ~15 kB |
FAQs
XML parsing and serialization for Office Open XML. Zero dependencies, drop-in replacement for xml + xml-js.
We found that @office-open/xml demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

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.

Company News
Socket’s first CISO brings deep experience securing high-growth SaaS companies as open source supply chain threats accelerate.

Company News
Replit is integrating Socket Firewall into its AI-powered development experience to help protect builders from malicious open source packages.

Security News
npm confirmed a tooling bug incorrectly marked several one-character packages as security holders and said it was working on a rollback.