
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,069,751 hz | 724,533 hz | 7.00x |
| Nested element | 1,122,376 hz | 279,423 hz | 4.02x |
| Nested with declaration | 1,050,046 hz | 248,678 hz | 4.22x |
| Scenario | @office-open/xml | xml-js | Speedup |
|---|---|---|---|
| Simple XML | 1,000,869 hz | 90,488 hz | 11.06x |
| Complex OOXML | 310,266 hz | 42,938 hz | 7.23x |
| With captureSpaces | 313,183 hz | 41,814 hz | 7.49x |
| Scenario | @office-open/xml | xml-js | Speedup |
|---|---|---|---|
| Simple element | 975,878 hz | 198,953 hz | 4.90x |
| Complex OOXML | 492,220 hz | 107,815 hz | 4.57x |
| Scenario | toElement() | xml() + xml2js() bridge | Speedup |
|---|---|---|---|
| Simple | 13,199,415 hz | 805,104 hz | 16.40x |
| Nested | 4,207,319 hz | 458,333 hz | 9.18x |
| @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.
The npm package @office-open/xml receives a total of 498 weekly downloads. As such, @office-open/xml popularity was classified as not popular.
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.