Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

xml Build Status

NPM

Fast and simple Javascript-based XML generator/builder for Node projects.

Install

$ npm install xml

API

xml(xmlObject, options)

Returns a XML string.

varxml=require('xml');varxmlString=xml(xmlObject,options);

xmlObject

xmlObject is a normal JavaScript Object/JSON object that defines the data for the XML string.

Keys will become tag names. Values can be an array of xmlObjects or a value such as a string or number.

xml({a: 1})==='<a>1</a>'xml({nested: [{keys: [{fun: 'hi'}]}]})==='<nested><keys><fun>hi</fun></keys></nested>'

There are two special keys:

_attr

Set attributes using a hash of key/value pairs.

xml({a: [{_attr: {attributes: 'are fun',too: '!'}},1]})==='<a attributes="are fun" too="!">1</a>'

_cdata

Value of _cdata is wrapped in xml ![CDATA[]] so the data does not need to be escaped.

xml({a: {_cdata: "i'm not escaped: <xml>!"}})==='<a><![CDATA[i\'m not escaped: <xml>!]]></a>'

Mixed together:

xml({a: {_attr: {attr:'hi'},_cdata: "I'm not escaped"}})==='<a attr="hi"><![CDATA[I\'m not escaped]]></a>'

options

indentoptionalstring What to use as a tab. Defaults to no tabs (compressed). For example you can use '\t' for tab character, or ' ' for two-space tabs.

stream Return the result as a stream.

Stream Example

varelem=xml.element({_attr: {decade: '80s',locale: 'US'}});varstream=xml({toys: elem},{stream: true});stream.on('data',function(chunk){console.log("data:",chunk)});elem.push({toy: 'Transformers'});elem.push({toy: 'GI Joe'});elem.push({toy: [{name:'He-man'}]});elem.close();/*result:data: <toys decade="80s" locale="US">data: <toy>Transformers</toy>data: <toy>GI Joe</toy>data: <toy> <name>He-man</name> </toy>data: </toys>*/

Declarationoptional Add default xml declaration as first node.

options are:

  • encoding: 'value'
  • standalone: 'value'

Declaration Example

xml([{a: 'test'}],{declaration: true})//result: '<?xml version="1.0" encoding="UTF-8"?><a>test</a>'xml([{a: 'test'}],{declaration: {standalone: 'yes',encoding: 'UTF-16'}})//result: '<?xml version="1.0" encoding="UTF-16" standalone="yes"?><a>test</a>'

Examples

Simple Example

varexample1=[{url: 'http://www.google.com/search?aq=f&sourceid=chrome&ie=UTF-8&q=opower'}];console.log(XML(example1));//<url>http://www.google.com/search?aq=f&amp;sourceid=chrome&amp;ie=UTF-8&amp;q=opower</url>

Example with attributes

varexample2=[{url: {_attr: {hostname: 'www.google.com',path: '/search?aq=f&sourceid=chrome&ie=UTF-8&q=opower'}}}];console.log(XML(example2));//result: <url hostname="www.google.com" path="/search?aq=f&amp;sourceid=chrome&amp;ie=UTF-8&amp;q=opower"/>

Example with array of same-named elements and nice formatting

varexample3=[{toys: [{toy: 'Transformers'},{toy: 'GI Joe'},{toy: 'He-man'}]}];console.log(XML(example3));//result: <toys><toy>Transformers</toy><toy>GI Joe</toy><toy>He-man</toy></toys>console.log(XML(example3,true));/*result:<toys> <toy>Transformers</toy> <toy>GI Joe</toy> <toy>He-man</toy></toys>*/

More complex example

varexample4=[{toys: [{_attr: {decade: '80s',locale: 'US'}},{toy: 'Transformers'},{toy: 'GI Joe'},{toy: 'He-man'}]}];console.log(XML(example4,true));/*result:<toys decade="80s" locale="US"> <toy>Transformers</toy> <toy>GI Joe</toy> <toy>He-man</toy></toys>*/

Even more complex example

varexample5=[{toys: [{_attr: {decade: '80s',locale: 'US'}},{toy: 'Transformers'},{toy: [{_attr: {knowing: 'half the battle'}},'GI Joe']},{toy: [{name: 'He-man'},{description: {_cdata: '<strong>Master of the Universe!</strong>'}}]}]}];console.log(XML(example5,true));/*result:<toys decade="80s" locale="US"> <toy>Transformers</toy> <toy knowing="half the battle"> GI Joe </toy> <toy> <name>He-man</name> <description><![CDATA[<strong>Master of the Universe!</strong>]]></description> </toy></toys>*/

Tests

Tests included use AVA. Use npm test to run the tests.

$ npm test

Examples

There are examples in the examples directory.

Contributing

Contributions to the project are welcome. Feel free to fork and improve. I accept pull requests when tests are included.

About

Fast and simple Javascript-based XML generator/builder for Node projects.

Resources

Stars

284 stars

Watchers

9 watching

Forks

Releases

Packages

Used by

Contributors

Languages