Skip to content
This repository has been archived by the owner on Apr 10, 2022. It is now read-only.

MantleXMLExtension support mutual conversion between Model object and XML with Mantle.

License

Notifications You must be signed in to change notification settings

soranoba/MantleXMLExtension

Repository files navigation

This repository has been archived.
We recommend migrating to Swift and JSON (or others).
If you want to be a maintainer, please contact me an email.

MantleXMLExtension

Build Status Carthage compatible Version License Platform

MantleXMLExtension support mutual conversion between Model object and XML with Mantle.

Overview

Mantle support the Json, but doesn't support XML.

This application is an extension for handling xml with Mantle.

  • Support these
    • Attributes
    • Child nodes, Nested child nodes, Array of child nodes
    • Customizable order of child nodes
    • Customizable XML declaration
    • Customizable transformer

What is Mantle ?

Model framework for Cocoa and Cocoa Touch

Installation

CocoaPods

To install it, simply add the following line to your Podfile:

pod 'MantleXMLExtension'

Carthage

To install it, simply add the following line to your Cartfile:

github "soranoba/MantleXMLExtension"

How to use functions of MantleXMLExtension

Conversion between Model object and XML

// XML to Model
id<MTLModel> model = [MXEXmlAdapter modelOfClass:model.class
                                     fromXmlData:xmlData
                                           error:&error];

// Model to XML
NSData* data = [MXEXmlAdapter xmlDataFromModel:model error:&error];

Model definition

Just add some to MTLModel for MXEXmlAdapter.

#pragma mark - MXEXmlSerializing

+ (NSDictionary<NSString*, id>* _Nonnull)xmlKeyPathsByPropertyKey
{
    return @{ @"status" : MXEXmlAttribute(@"", @"status"),
              @"userCount" : @"summary.count",
              @"users" : MXEXmlArray(@"", MXEXmlChildNode(@"user")) };
}

+ (NSString* _Nonnull)xmlRootElementName
{
    return @"response";
}

Path type

MXEXmlAdapter support 5 types of paths.

MXEXmlValuePath

For example:

<parent>
  <child>value</child>
</parent>
@"parent.child"

If you get value, please use this. Value doesn't support MXEXmlSerializing object.

MXEAttributePath

For example:

<parent>
  <child key="value" />
</parent>
MXEXmlAttribute(@"parent.child", @"key")

If you get value of specified attribute, please use this.

MXEChildNodePath

For example:

<parent>
  <child>
    <id>1</id>
    <name>Alice</name>
  </child>
</parent>
MXEXmlChildNode(@"parent.child")

If you get nested MXEXmlSerializing object, please use this. This path only support MXEXmlSerializing object.

MXEArrayPath

For example:

<parent>
  <children>
    <child>...</child>
    <child>...</child>
    <child>...</child>
  </children>
</parent>
MXEXmlArray(@"parent.children", MXEXmlChildNode(@"child"))

If you get array of value, please use this. This path can be used in combination with other path.

If you use this, you MUST use MXEXmlAdapter # xmlNodeArrayTransformerWithModelClass:.

+ (NSValueTransformer* _Nonnull)childrenXmlTransformer
{
    return [MXEXmlAdapter xmlNodeArrayTransformerWithModelClass:ChildModel.class];
}

Multiple elements of XML

For example:

<parent>
  <element_a>....</element_a>
  <element_b title="...." />
</parent>
@[@"parent.element_a", MXEXmlAttribute(@"parent.element_b", @"title")]

It is used when you want to transfer multiple elements of XML to another model. Please notice that root element of XML does not change.

Transformer

You can use these transformer for MXEXmlSerializing object.

  • MXEXmlAdapter # xmlNodeArrayTransformerWithModelClass:
  • MXEXmlAdapter # xmlNodeTransformerWithModelClass:
  • MXEXmlAdapter # mappingDictionaryTransformerWithKeyPath:valuePath:

You can use these transformer for primitive type.

  • MXEXmlAdapter # numberTransformer
  • MXEXmlAdapter # boolTransformer

Other information

Please refer to documentation, unit tests and Mantle.

Contribute

Pull request is welcome =D

License

MIT License

About

MantleXMLExtension support mutual conversion between Model object and XML with Mantle.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages