Skip to content

RobinBuschmann/xml-typescript

Repository files navigation

Build Status

Dependencies status

xml-decorators

Decorators for xml serialization. Uses js2xmlparser under the hood.

Usage of decorators

import {XMLElement, XMLAttribute, XMLChild, xml} from 'xml-decorators';

const HOBBY_NS = 'h';

class Hobby {

  @XMLAttribute({namespace: HOBBY_NS})
  private name: string;

  @XMLAttribute({namespace: HOBBY_NS})
  private description: string;
}

const PERSON_ROOT = 'person';
const PERSON_NS = 'ps';

@XMLElement({root: PERSON_ROOT}) // optional
class Person {

  @XMLAttribute({namespace: PERSON_NS})
  private firstname: string;

  private lastname: string;

  @XMLAttribute({namespace: PERSON_NS})
  get fullname(): string {

    return this.firstname + ' ' + this.lastname;
  }

  @XMLAttribute({namespace: PERSON_NS})
  private age: number;

  @XMLChild({
    namespace: PERSON_NS,
    name: 'hobby'
  })
  private hobbies: Hobby[];

  @XMLChild({
    namespace: PERSON_NS,
    stripPluralS: true
  })
  private friends: Person[];

  @XMLChild({
    name: 'pet',
    implicitStructure: 'pets.$'
  })
  private pets: string[];
  
 }

Serialization

const hobbies = [
  new Hobby('reading', 'loves to read books, magazines and web articles'),
  new Hobby('listening to Music', 'loves to listen to rock music'),
  new Hobby('travelling', 'loves to travel around the world'),
];
const pets = ['dog', 'cat'];
const bob = new Person('Bob', 'Mad', 29, hobbies, pets);

const bobXml = xml.serialize(bob);

Or if you want to override the root tag name or did not used the @XMLElement annotation.

const bob2Xml = xml.serialize('great-person', bob);

Result

<?xml version='1.0'?>
<great-person ps:firstname='Bob' ps:fullname='Bob Mad' ps:age='29'>
    <ps:hobby h:name='reading' h:description='loves to read books, magazines and web articles'/>
    <ps:hobby h:name='listening to Music' h:description='loves to listen to rock music'/>
    <ps:hobby h:name='travelling' h:description='loves to travel around the world'/>
    <pets>
        <pet>dog</pet>
        <pet>cat</pet>
    </pets>
</great-person>

Async

xml
  .serializeAsync(bob)
  .then(bobXml => console.log(bobXml))
  ;

Schema

If you want to retrieve the "js2xmlparser" schema instead:

xml.getSchema(bob);
xml.getSchemaAsync(bob).then(/* */);

About

Decorators for xml serialization

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy