@mitre/jsonix
Version:
Jsonix (JSON interfaces for XML) is a JavaScript library which allows converting between XML and JSON structures.
114 lines (91 loc) • 4.14 kB
Markdown
for XML) is a JavaScript library which allows you to convert between XML and JSON structures.
* With Jsonix you can parse XML into JSON (this process is called _unmarshalling_) or serialize JSON in XML form (this is called _marshalling_).
* These conversions are based on declarative XML/JSON mappings which can be written manually or generated from an XML Schema.
Jsonix advantages:
* Strongly structured
* Type-safe
* Bidirectional
* (Optionally) XML Schema-driven
See also the other [Jsonix features](#jsonix-features).
## Example
Here's a working example for the [purchase order schema](http://www.w3.org/TR/xmlschema-0/#po.xsd) (try it [online in JSFiddle](http://jsfiddle.net/lexi/LP3DC/)).
### Generate mappings
```
java -jar node_modules/jsonix/lib/jsonix-schema-compiler-full.jar
-d mappings -p PO purchaseorder.xsd
```
Generates mappings for the `purchaseorder.xsd` schema in the `mappings\PO.js`; mappings will be placed in the variable `PO`.
```javascript
// Include or require PO.js so that PO variable is available
// For instance, in node.js:
var PO = require('./mappings/PO').PO;
// First we construct a Jsonix context - a factory for unmarshaller (parser)
// and marshaller (serializer)
var context = new Jsonix.Context([PO]);
// Then we create a unmarshaller
var unmarshaller = context.createUnmarshaller();
// Unmarshal an object from the XML retrieved from the URL
unmarshaller.unmarshalURL('po.xml',
// This callback function will be provided
// with the result of the unmarshalling
function (unmarshalled) {
// Alice Smith
console.log(unmarshalled.value.shipTo.name);
// Baby Monitor
console.log(unmarshalled.value.items.item[1].productName);
});
```
You can also `unmarshalString`, `unmarshalDocument` and (under node.js) `unmarshalFile`.
```javascript
// Create a marshaller
var marshaller = context.createMarshaller();
// Marshal a JavaScript Object as XML (DOM Document)
var doc = marshaller.marshalDocument({
name: {
localPart: "purchaseOrder"
},
value: {
orderDate: { year: 1999, month: 10, day: 20 },
shipTo: {
country: "US",
name: "Alice Smith",
street: "123 Maple Street",
city: "Mill Valley",
state: "CA",
zip: 90952
},
billTo: { /* ... */ },
comment: 'Hurry, my lawn is going wild!',
items: { /* ... */ }
}
});
```
You can also `marshalString`.
* Runs in almost any modern browser
* Runs in [Node.js](http://nodejs.org/)
* Runs with CommonJS modules, AMD modules as well as vanilla (globals, without any module loader)
* Bidirectional (XML -> JS as well as JS -> XML)
* Implements *marshalling* (serializing the JavaScript object into XML)
* Supports string data and DOM nodes as result
* Implements *unmarshalling* (parsing a JavaScript object from XML)
* Supports string data, DOM nodes, URLs or files (with Node.js) as source
* Driven by declarative XML/JS mappings which control how JavaScript object is converted into XML or vice versa
* Mappings can be automatically generated based on the XML Schema
* Strongly-structured - XML/object mappings describe structures of JavaScript objects
* Strongly-typed - Conversion between string content on XML side and values on the JavaScript side is controlled by declared property types
* Provides extensible type system
* Supports most XML Schema simple types (inlcuding QNames)
* Supports enumerations, list and union simple types
* Allows adding own simple types
* Supports complex types consisting of several properties
* Supports deriving complex types by extension
* Provides advanced property system
* Value, attribute, element, element reference properties for string processing of XML content
* Any attribute, any element properties for "lax" processing for XML content
## Documentation
* [Jsonix GitHub Project](https://github.com/highsource/jsonix)
* [Jsonix Wiki](https://github.com/highsource/jsonix/wiki)
* Jsonix (JSON interfaces