@superhuit/xml-to-react
TypeScript icon, indicating that this package has built-in type declarations

2.0.0 • Public • Published

XML-to-React

Converts an XML document into a React tree.

ℹ️ Fork of the unmaintained Conde Nast implementation to support React 18, upgrade dependencies and convert to Typescript.

license

Prerequisites

This library may only be used in projects using React version 18 or greater.

Installation

npm install --save @superhuit/xml-to-react

This assumes you are using npm as your package manager.

Usage

import XMLToReact from '@superhuit/xml-to-react';

const xmlToReact = new XMLToReact({/* converters */});
const reactTree = xmlToReact.convert(/* XML string */);

Simple Example

Convert XML nodes into DOM elements with any provided attributes

import ReactDOM from 'react-dom';
import XMLToReact from '@superhuit/xml-to-react';
import MyListItem from './MyListItem';

const xmlToReact = new XMLToReact({
  Example: (attrs) => ({ type: 'ul', props: attrs }),
  Item: (attrs) => ({ type: MyListItem, props: attrs })
});

const reactTree = xmlToReact.convert(`
  <Example name="simple">
    <Item i="1">one</Item>
    <Item>two</Item>
    <Item>three</Item>
  </Example>
`);

ReactDOM.render('app-container', reactTree);
export default function MyListItem({ children, i }) {
  return <li data-i={i}>{children}</li>;
}

This example would render the following:

<div id="app-container">
  <ul name="simple">
    <li data-i="1">one</li>
    <li>two</li>
    <li>three</li>
  </ul>
</div>

Converters

Converters are required mapping functions that define how an XML node should be converted to React. A converter must return an object in the format { type, [props] }, which is intended to be passed to React.createElement.

  • type - required tagName, React component, or React fragment
  • props - (optional) props object

Example

function myConverter(attributes) {
  return {
    type: 'div',
    props: {
      className: 'test'
    }
  }
}

XMLToReact constructor

The XMLToReact class is instantiated with a map of converters.

{
  nodeName: converterFunction
}

convert( xml, data )

  • xml {string} - xml node or document
  • data {Object} - (optional) any data to be passed to all converters

Prior Art

  • jsonmltoreact demonstrated this technique using JsonML, and serves as motivation for this project.

Thanks

Contributors

See the list of contributors who participated in writing this library.

Maintainers

  • Daniel Taveras (@taveras)

Readme

Keywords

none

Package Sidebar

Install

npm i @superhuit/xml-to-react

Weekly Downloads

1

Version

2.0.0

License

Apache-2.0

Unpacked Size

18.6 kB

Total Files

5

Last publish

Collaborators

  • kilian-m97
  • hsmio
  • aacoelho
  • felipe_s8
  • charlottehabre
  • luisbraga-s8