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.
- Host: GitHub
- URL: https://github.com/artdecocode/rexml
- Owner: artdecocode
- License: mit
- Created: 2018-07-18T20:42:49.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2021-05-08T12:52:54.000Z (over 4 years ago)
- Last Synced: 2025-02-08T08:29:15.637Z (11 months ago)
- Language: JavaScript
- Size: 148 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# rexml
[](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 2019
Tech Nation Visa Sucks