https://github.com/robinbuschmann/xml-typescript
Decorators for xml serialization
https://github.com/robinbuschmann/xml-typescript
decorators xml-serialization
Last synced: about 1 year ago
JSON representation
Decorators for xml serialization
- Host: GitHub
- URL: https://github.com/robinbuschmann/xml-typescript
- Owner: RobinBuschmann
- License: mit
- Created: 2016-12-06T09:14:29.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2022-07-25T07:49:06.000Z (almost 4 years ago)
- Last Synced: 2024-04-29T15:06:28.658Z (almost 2 years ago)
- Topics: decorators, xml-serialization
- Language: TypeScript
- Homepage:
- Size: 64.5 KB
- Stars: 21
- Watchers: 5
- Forks: 19
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://travis-ci.org/RobinBuschmann/xml-typescript)
[](https://david-dm.org/RobinBuschmann/xml-typescript.svg)
# xml-decorators
Decorators for xml serialization. Uses [js2xmlparser](https://www.npmjs.com/package/js2xmlparser)
under the hood.
## Usage of decorators
```typescript
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
```typescript
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.
```typescript
const bob2Xml = xml.serialize('great-person', bob);
```
### Result
```xml
dog
cat
```
### Async
```typescript
xml
.serializeAsync(bob)
.then(bobXml => console.log(bobXml))
;
```
## Schema
If you want to retrieve the "js2xmlparser" schema instead:
```typescript
xml.getSchema(bob);
xml.getSchemaAsync(bob).then(/* */);
```