New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More

dynamic-xml-builder

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

dynamic-xml-builder

dynamic XML builder

0.1.1
Version published
Weekly downloads
142
86.84%
Maintainers
1
Weekly downloads
 
Created

xml-builder

Build XML dynamically.

Some rant

Looking through the NPM trying to find an intuitive way to declare XML using JSON objects and all I see is a $#1tload of bad syntax design. Why is it so hard to first design the syntax and then the desired functionality around it? The developers are the users, one should know to program for their convenience.

So here's another attempt at an XML builder...

How easy this is

Write this

const XMLObject = require('xml-builder');

var xml = new XMLObject('html');

// assign an attribute
xml._lang = 'en';
// assign a whole object
xml.head = {
    meta: {
        _charset: 'utf-8'
    }
}
// go deeper
xml.head.title = 'example'
// or more complex
xml.body = {
    div: {
        _class: 'my-design',
        p: [
            'hello', 'how', 'are', 'you'
        ],
        br: null
    }
}
// or even do this
xml.body.div.div.p = 'great'

and with

xml.toXML();

get that:

<html lang="en">
	<head>
		<meta charset="utf-8"/>
		<title>example</title>
	</head>
	<body>
		<div class="my-design">
			<p>hello</p>
			<p>how</p>
			<p>are</p>
			<p>you</p>
			<br/>
			<div>
				<p>great</p>
			</div>
		</div>
	</body>
</html>

or with

xml.toXML({
    indent: 2, newLine: '\n'
})

this:

<html lang="en">
  <head>
    <meta charset="utf-8"/>
    <title>example</title>
  </head>
  <body>
    <div class="my-design">
      <p>hello</p>
      <p>how</p>
      <p>are</p>
      <p>you</p>
      <br/>
      <div>
        <p>great</p>
      </div>
    </div>
  </body>
</html>

Every element in the object tree (except for assigned primitive values) is an XMLObject. Therefore the same functionality applies to those objects:

xml.head.toXML()
<head>
    <meta charset="utf-8"/>
    <title>example</title>
</head>
xml.head.toObject()
{ head: { meta: { _charset: 'utf-8' }, title: 'example' } }

PS. The examples include a lot of HTML, this library is not intended for composing HTML.

Requirements

Since this is based on ES6 proxies, then ES6 support is required:

Constructor overloads

new XMLObject('html')
new XMLObject('html', {head: {}, body: {}})
new XMLObject('html', {head: {}, body: {}}, ...options)
new XMLObject({html: {head: {}, body: {}}})
new XMLObject({html: {head: {}, body: {}}}, ...options)

Options

Different options can be passed to the constructor or toXML(options) method

NameDefaultUsageDescription
attrSel"_"constructorused to identify attributes (attrSel + attributeName, i.e. "_charset")
defVal""constructordefault value to use when element value has not been provided
indent"\t"toXMLindent definition, can be any string
newLine"\r\n"toXMLnewline definition, can be any string
attrKeynulltoXMLwhen provided, will group the attributes of an element under attrKey object
declarationnulltoXMLprovide true for the default declaration, or any string to override it

Testing

node test

Licence

MIT

FAQs

Package last updated on 02 Jun 2019

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