You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

xml-query

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

xml-query

Super small library to retrieve values and attributes from the XML AST generated by xml-reader

1.2.1
Source
npmnpm
Version published
Weekly downloads
2.3K
93.27%
Maintainers
1
Weekly downloads
 
Created
Source

XML Query

Super small (~60 sloc) library to retrieve values and attributes from the XML AST generated by xml-reader.

Easy-to-use jQuery-like interface.

WORK IN PROGRESS!!!

Everything here is subject to change

Install

npm install --save xml-query

Usage

Reading xml streams/strings

// given this xml

const xml =
`<message id="1001" date="2016-06-19">
    <from>Bob</from>
    <to>Alice</to>
    <subject>Hello</subject>
    <body>Lorem ipsum dolor sit amet, consectetur adipiscing elit</body>
</message>`;

// we can use the xml-reader module to get the ast from the xml source

const reader = xmlReader.create(); // see https://www.npmjs.com/package/xml-reader
reader.on('done', ast => {
    // do something with the ast
});
reader.parse(xml);

Following examples will use this ast.

xmlQuery()

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.

xmlQuery(ast).find('body').get(2); // returns the `subject` node

.find()

Find by name. Including top level nodes and all its children.

xmlQuery(ast).find('body'); // returns a new xmlQuery object containing the body element

.attr()

Get all attributes. If a name is provided, it returns the value for that key.

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.

xmlQuery(ast).children();

.each()

Iterate over a xmlQuery object, executing a function for each element.

xmlQuery(ast).each(node => console.log(node.name));
// prints:
// from
// to
// subject
// body

.map()

Iterate over a xmlQuery object, executing a function for each element. Returns the results in an array.

xmlQuery(ast).map(node => node.name); // ['from', 'to', 'subject', 'body']

.prop()

Get the value of a property for the first element in the set.

xmlQuery(ast).prop('name'); // 'message'

.text()

Get the combined text contents of each element, including their descendants

xmlQuery(ast).find('subject').text(); // 'hello'

.eq()

Returns a new XmlQuery object for the selected element by index

xmlQuery(ast).children().eq(2); // xmlQuery object containing the 'subject' node

.first()

Returns a new XmlQuery object for the first element. Same as .eq(0)

xmlQuery(ast).children().first(); // xmlQuery object containing the 'from' node

.last()

Returns a new XmlQuery object for the last element. Same as .eq(length - 1)

xmlQuery(ast).children().last(); // xmlQuery object containing the 'body' node

.length

Number of elements. Returns the same result as .size()

xmlQuery(ast).children().length; // 4

.size()

Number of elements. Returns the same result as .length

xmlQuery(ast).children().size(); // 4

Keywords

xml

FAQs

Package last updated on 28 Jun 2016

Did you know?

Socket

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.

Install

Related posts