Socket
Socket
Sign inDemoInstall

dynamic-xml-builder

Package Overview
Dependencies
0
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    dynamic-xml-builder

dynamic XML builder


Version published
Weekly downloads
82
increased by28.13%
Maintainers
1
Install size
27.4 kB
Created
Weekly downloads
 

Readme

Source

dynamic-xml-builder

Intro

Dynamically create XML from JS objects.

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

const data = new XMLObject('data');

data.user._type = 'person'
data.user.email = 'john@johnjohnnyandjohnson.com'
data.user.aliases.alias = ['John', 'Johnny', 'Johnson']
data.toXML()
<data>
    <user type="person">
        <email>john@johnjohnnyandjohnson.com</email>
        <aliases>
            <alias>John</alias>
            <alias>Johnny</alias>
            <alias>Johnson</alias>
        </aliases>
    </user>
</data>

Examples

PS. The examples use HTML because it's a well-known XML.

Object manipulation:

const XMLObject = require('dynamic-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 assign a property in a non-existing path
xml.body.div.div.p = 'great'
<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>

Configure output formatting:

xml.toXML({
    indent: 2, newLine: '\n'
})
<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>

Output a plain object:

xml.head.toObject()
{ head: { meta: { _charset: 'utf-8' }, title: 'example' } }

When you need to directy assign value to element you can use a value selector (_value by default):

var xml = new XMLObject('a')
xml._href = 'https://www.example.com'
xml._value = 'Click me!'
<a href="https://www.example.com">Click me!</a>

Requirements

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

  • Node 6.4.0+
  • Browsers (caniuse.com)

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")
valueSel"_value"constructorused to set the element value directly
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
selfClosetruetoXMLprovice false to disable self-closing tags

Licence

MIT

Keywords

FAQs

Last updated on 09 Jan 2024

Did you know?

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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc