# grab-xml

> A simple XML parser

Latest version **1.0.2** (published 2023-04-06) · ISC license · 0 weekly downloads

## Install

```sh
npm install grab-xml
pnpm add grab-xml
yarn add grab-xml
bun add grab-xml
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.2 |
| Published | 2023-04-06 |
| First published | 2023-03-16 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 111.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | andrewjk |
| Maintainers | andrewjk |
| Keywords | xml, html, parse |

## Links

- npm: https://www.npmjs.com/package/grab-xml
- Homepage: https://github.com/andrewjk/grab-xml
- npm.io page: https://npm.io/package/grab-xml

## Alternatives

- [babylon](https://npm.io/package/babylon.md) — 5.1M weekly downloads
- [csscolorparser](https://npm.io/package/csscolorparser.md) — 3.7M weekly downloads
- [expr-eval-fork](https://npm.io/package/expr-eval-fork.md) — 1.5M weekly downloads
- [@leeoniya/ufuzzy](https://npm.io/package/@leeoniya/ufuzzy.md) — 247.7K weekly downloads
- [xml-parser](https://npm.io/package/xml-parser.md) — 78.4K weekly downloads

## Recent versions

- 1.0.2 (latest) — 2023-04-06
- 1.0.1 — 2023-03-16

## README

# grab-xml

A simple XML parser.

## Installation

Use `npm` (or `yarn`, or `pnpm`) to add grab-xml to your project:

```bash
npm install grab-xml
```

grab-xml contains CommonJS and ESM modules for use in Node, in the browser and at the edge.

## Usage

### grabXml

Parses XML into a root XmlNode object with all of the XML's nodes as children.

```ts
import { grabXml } from 'grab-xml';
const xml = '<xml></xml>';
const doc = grabXml(xml);
```

### XmlNode

Each XmlNode object has the following properties and functions:

| Property | Type | Description |
| --- | --- | --- |
| type | XmlNodeType | The type of node |
| parent | XmlNode | The parent node |
| tag | string | The tag name of the node, if applicable for the node type |
| attributes | object | Any attributes that were set on the node, if applicable for the node type |
| children | XmlNode[] | The child nodes, if applicable for the node type |
| text | string | The text content, if applicable for the node type |
| selfClosing | boolean | undefined | Whether this node is self-closing |

| Function | Description |
| --- | --- |
| content | Returns a string containing the text content of the node and its children |
| outerXml | Returns a string containing the XML of the node and its children, including the node itself |
| innerXml | Returns a string containing the XML of the node's children |
| json | Returns a string containing a JSON representation of the node and its children, excluding the circular parent references |

### Options

You can pass an options object into the grabXml function with the following optional properties:

| Property | Type | Description |
| --- | --- | --- |
| trimWhitespace | boolean | Whether to trim whitespace from text elements and omit text elements that contain only whitespace |
| ignoreComments | boolean | Whether to ignore comment nodes |
| ignoreInstructions | boolean | Whether to ignore processing instruction nodes |
| voidElements | string[] | The tags of elements that do not have any children, such as &lt;input> and &lt;br> in HTML documents |
| literalElements | string[] | The tags of elements that should be extracted with their unprocessed text content, such as &lt;script> and &lt;style> in HTML documents |

### grabHtml

Parses HTML into a root XmlNode object with all of the HTML's nodes as children. Basically, it calls `grabXml` with the `voidElements` and `literalElements` options set to values that work for HTML.

```ts
import { grabHtml } from 'grab-xml';
const html = '<html></html>';
const doc = grabHtml(html);
```

### Benchmarks

There is a benchmark available in the `bench` directory that compares grab-xml with some other options. Use the following commands to run it:

```bash
cd bench
npm install
npm run bench
```

Note that grab-xml does a lot less than some of the slower options.

---
_Source: https://npm.io/package/grab-xml · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
