Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pladaria/xml-query
Super small library to retrieve values and attributes from the XML AST generated by xml-reader
https://github.com/pladaria/xml-query
Last synced: about 2 months ago
JSON representation
Super small library to retrieve values and attributes from the XML AST generated by xml-reader
- Host: GitHub
- URL: https://github.com/pladaria/xml-query
- Owner: pladaria
- License: mit
- Created: 2016-06-19T10:58:45.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2021-09-12T08:56:37.000Z (over 3 years ago)
- Last Synced: 2024-11-14T09:34:17.625Z (about 2 months ago)
- Language: JavaScript
- Size: 276 KB
- Stars: 15
- Watchers: 1
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Super small (~60 LOC) library for retrieving values and attributes
from the XML AST generated by xml-reader
with an easy-to-use jQuery-like interface.
## Install
```bash
npm install --save xml-query
```## Usage
### Reading xml streams/strings
The following XML will be used to illustrate all examples
```xml
Bob
Alice
Hello
Bla bla bla```
Let's read the XML using [xml-reader](http://github.com/pladaria/xml-reader).
```javascript
const XmlReader = require('xml-reader');const xml =
`
Bob
Alice
Hello
Bla bla bla
`;const ast = XmlReader.parseSync(xml);
```### xmlQuery()
```javascript
const xmlQuery = require('xml-query');// creating from single ast
const xq = xmlQuery(ast);// creating from an array of asts
const xq = xmlQuery([ast, ...more]);
```### .get()
Retrieve one of the elements.
```javascript
xmlQuery(ast).find('body').get(2); // returns the `subject` node
```### .find()
Find by name. Including top level nodes and all its children.
```javascript
xmlQuery(ast).find('body'); // xmlQuery containing the body element
```### .has()
Returns `true` if it has the given element. Faster than `find()` because it stops on first occurence.
```javascript
xmlQuery(ast).has('body'); // true
```### .attr()
Get all attributes. If a name is provided, it returns the value for that key.
```javascript
xmlQuery(ast).attr(); // {id: '1001', date: '2016-06-19'}
xmlQuery(ast).attr('id'); // '1001'
```### .children()
Returns a new xmlQuery object containing the children of the top level elements.
```javascript
xmlQuery(ast).children();
```### .each()
Iterate over a xmlQuery object, executing a function for each element.
```javascript
xmlQuery(ast).each(node => console.log(node.name));
// from
// to
// subject
// body
```### .map()
Iterate over a xmlQuery object, executing a function for each element. Returns the results in an array.
```javascript
xmlQuery(ast).map(node => node.name); // ['from', 'to', 'subject', 'body']
```### .prop()
Get the value of a property for the first element in the set.
```javascript
xmlQuery(ast).prop('name'); // 'message'
```### .text()
Get the combined text contents of each element, including their descendants
```javascript
xmlQuery(ast).find('subject').text(); // 'hello'
```### .eq()
Returns a new XmlQuery object for the selected element by index
```javascript
xmlQuery(ast).children().eq(2); // xmlQuery containing the 'subject' node
```### .first()
Returns a new XmlQuery object for the first element. Same as `.eq(0)`
```javascript
xmlQuery(ast).children().first(); // xmlQuery containing the 'from' node
```### .last()
Returns a new XmlQuery object for the last element. Same as `.eq(length - 1)`
```javascript
xmlQuery(ast).children().last(); // xmlQuery containing the 'body' node
```### .length
Number of elements. Returns the same result as `.size()`
```javascript
xmlQuery(ast).children().length; // 4
```### .size()
Number of elements. Returns the same result as `.length`
```javascript
xmlQuery(ast).children().size(); // 4
```## License
MIT