An open API service indexing awesome lists of open source software.

https://github.com/artdecocode/rexml

Simple XML parsing with a regular expression.
https://github.com/artdecocode/rexml

Last synced: 11 months ago
JSON representation

Simple XML parsing with a regular expression.

Awesome Lists containing this project

README

          

# rexml

[![npm version](https://badge.fury.io/js/rexml.svg)](https://npmjs.org/package/rexml)

`rexml` is a Node.JS package for simple XML parsing with a regular expression. It's been tested to work for simple use cases (does work on nested tags).

```sh
yarn add rexml
```



## Table Of Contents

- [Table Of Contents](#table-of-contents)
- [API](#api)
* [`extractTags(tag, string): Return`](#extracttagstag-stringarraystringstring-string-return)
* [`Return`](#type-return)
* [Extracting Multiple Tags](#extracting-multiple-tags)
* [`extractProps(string: string, parseValue?: boolean): Object`](#extractpropsstring-stringparsevalue-boolean-objectstringbooleanstringnumber)
* [`extractTagsSpec(tag: string, string: string): {content, props}[]`](#extracttagsspectag-stringstring-string-content-props)
- [Copyright](#copyright)



## API

The package is available by importing its default and named functions:

```js
import rexml, { extractProps, extractTagsSpec, extractPropSpec } from 'rexml'
```



### extractTags(
  `tag: string|!Array,`
  `string: string,`
): Return
Extract member elements from an XML string. Numbers and booleans will be parsed into their JS types.

- tag* (string \| !Array<string>): Which tag to extract, e.g., `div`. Can also pass an array of tags, in which case the name of the tag will also be returned.
- string* `string`: The XML string.

The tags are returned as an array with objects containing `content` and `props` properties. The content is the inner content of the tag, and `props` is the attributes specified inside the tag.

SourceOutput

```js
import extractTags from 'rexml'

const xml = `


Hello World

`

const res = extractTags('div', xml)
```

```js
[ { content: '',
props:
{ id: 'd1',
class: 'example',
contenteditable: true },
tag: 'div' },
{ content: 'Hello World',
props: { id: 'd2', class: 'example' },
tag: 'div' } ]
```

__`Return`__: The return type.

| Name | Type | Description |
| ------------ | --------------------------- | ------------------------------------------------------ |
| __content*__ | string | The content of the tag, including possible whitespace. |
| __props*__ | !Object | The properties of the element. |
| __tag*__ | string | The name of the extracted element. |



#### Extracting Multiple Tags

It's possible to give an array of tags which should be extracted from the _XML_ string.

SourceOutput

```js
import extractTags from 'rexml'

const xml = `


Hello World

Art Deco, 2019

`

const res = extractTags(['div', 'footer'], xml)
```

```js
[ { content: '',
props: { id: 'd1' },
tag: 'div' },
{ content: 'Hello World',
props: { id: 'd2', class: 'example' },
tag: 'div' },
{ content: 'Art Deco, 2019',
props: {},
tag: 'footer' } ]
```



### extractProps(
  `string: string,`
  `parseValue?: boolean,`
): Object

Extracts the properties from the attributes part of the tag and returns them as an object. It will parse values if not specified otherwise.

SourceOutput

```js
import { extractProps, extractPropsSpec } from 'rexml'

const s = `id="d2"
class="example"
value="123"
parsable="true"
ignore="false"
2-non-spec
required`

const res = extractProps(s)
console.log(JSON.stringify(res, null, 2))

// don't parse booleans and integers
const res2 = extractProps(s, false)
console.log(JSON.stringify(res2, null, 2))

// conform to the spec
const res3 = extractPropsSpec(s)
console.log(JSON.stringify(res3, null, 2))
```

```json
{
"id": "d2",
"class": "example",
"value": 123,
"parsable": true,
"ignore": false,
"2-non-spec": true,
"required": true
}
{
"id": "d2",
"class": "example",
"value": "123",
"parsable": "true",
"ignore": "false",
"2-non-spec": true,
"required": true
}
{
"id": "d2",
"class": "example",
"value": 123,
"parsable": true,
"ignore": false,
"required": true
}
```



### extractTagsSpec(
  `tag: string,`
  `string: string,`
): {content, props}[]

Same as the default method, but confirms to the XML specification in defining attributes.

```javascript
import { extractTagsSpec } from 'rexml'

const xml = `


Attributes cannot start with a number.

`

const res = extractTagsSpec('div', xml)

console.log(JSON.stringify(res, null, 2))
```
```json
[
{
"props": {
"id": "d1",
"class": "example",
"contenteditable": true
},
"content": ""
}
]
```



## Copyright




Art Deco


© Art Deco 2019


Tech Nation Visa


Tech Nation Visa Sucks