@condenast/xml-to-react

1.0.0 • Public • Published

XML-to-React

Converts an XML document into a React tree.

license Build Status Coverage Status

Proudly built by:

Prerequisites

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

Installation

npm install --save xml-to-react

This assumes you are using npm as your package manager.

Usage

import XMLToReact from '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 '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

  • xmldom for providing a solid XML parser.
  • Rollup for simple and quick module bundling.
  • React for the innovation.

Contributors

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

Readme

Keywords

none

Package Sidebar

Install

npm i @condenast/xml-to-react

Weekly Downloads

126

Version

1.0.0

License

Apache-2.0

Unpacked Size

354 kB

Total Files

21

Last publish

Collaborators

  • frandevinney
  • renovate
  • condenastadmin
  • copilot-robot
  • fennen529
  • fmadrie
  • gmedina
  • bigzed
  • andi.anderson522
  • davidkofahl
  • tollmanz
  • amalamchtal
  • tdshap
  • danhaller
  • rajasinghcondenast
  • derrickatcn
  • tce
  • cnid_engineering
  • lilyhealey
  • areadman
  • manthanbhosle
  • psharma2
  • bhumikakhatri
  • igostu
  • cwoldt
  • mtzhang
  • manthanraut
  • vinay-pr
  • drosenbaum
  • tchathur
  • aswani_gupta
  • kalyanikasar
  • shreyapa
  • bhavin_conde
  • natelawscn
  • leahzxxz
  • colin-alexa
  • subhash453
  • rashmicn
  • katemont
  • eddleston
  • rtt
  • anwaukoni
  • eduardoveras
  • mrgentax
  • cl4m
  • spollini
  • fedeava
  • guidop91
  • nithya10
  • shobhit0309
  • mb_dev
  • emilyatk
  • luis_gomez
  • karmenn
  • khiaraortiz
  • mdmohsin
  • dmitriy_komarov-cn
  • anarayanan
  • jmcamacho
  • hariprasath_cn
  • vijay-mallik
  • srikanthns
  • utkarsh_sanjivan-conde
  • mallica
  • agururajan
  • upenpanging
  • rjain198
  • ashwini_uppar
  • pmasade
  • guru05111984
  • suresharam
  • dhanraj_cn
  • pratik-gupta
  • shailvishukla
  • vivekans
  • samtiffin
  • adityaanand534
  • chandan-condenast
  • vijayalakshmi-sunagar
  • namankumarsinha
  • ankushvijay93
  • likhita
  • priyankanandi
  • soumyagundu
  • dikshita_khandke
  • ambay_chaurasia
  • manikandancn
  • rghvndr99
  • mulla2
  • arhovale
  • vinitha_thiagarajan
  • andregcab
  • priyanka_jha
  • akeshavamurthy
  • raxs
  • babincondenast
  • ksriniva2
  • prajwal_keshav
  • cn-connorbrannigan
  • anaedzm
  • maila-labib
  • josephrussell-cn
  • hebsibal_selvaraj
  • a-rena
  • danj-cn
  • issanjana
  • atp-engineering
  • siddhu-23
  • eunianina
  • nprabhu-cn
  • cnarkhede
  • unnatik
  • nnasirov
  • namansingh_bhandari
  • jordi.escude
  • asinghconde
  • joselee10012024
  • spoorthi.chandrashekar
  • yarramanohar
  • conde_jode
  • juliendevlin
  • nitish-tandia
  • nnagle2
  • klnarayanan
  • roberlander
  • jasonmarlin
  • shrutinivedita
  • simeon455
  • alokreddycn
  • muthuprakashvelumani
  • ricardofbarros
  • davidstockercondenast
  • tejasvi-bg
  • vnallasa
  • karthik_cn
  • boygao1992
  • midhunmurali001
  • arunconde
  • m-mallikarjuna
  • anshul2025
  • manjunath_conde
  • ponchosb
  • nbentonconde
  • dkorenblyum
  • bbui
  • ac432
  • ssingh417
  • skumar7
  • omsun22
  • tdscondenast
  • suhitrathi-condenast
  • cyrilpanicker-condenast
  • rajashreearvikar19
  • speluri
  • kishor-kumar07
  • nvillato
  • vikas-sc
  • vchand-cn
  • nikhilconde
  • mohnish_vurity
  • mala-shanbhag
  • nishkalaadiga
  • jfrederick12
  • imakshath
  • rashmi-rao
  • biku
  • joshcondenast
  • tamal_banerjee
  • sanjana_s
  • mitchellstewart
  • mithunsathyanmits
  • akshayjain10
  • nhrqz
  • utkarsh24
  • imran-conde
  • pradeep_nayak
  • gshankar-in
  • vinayashreeram
  • anubalakrishnan
  • dev-anand-94
  • deepak_mohan
  • vishnusimvisfear
  • saahithisri
  • noman-cn
  • vmishra2305
  • ankitkumar02
  • rajeshs32
  • samruddhidube24
  • sheetalparsa
  • gapurdev
  • sabarni-condenast
  • raveena-ram
  • suma_k
  • vishal_ravi
  • snehak
  • sureneskandarpour
  • timklimowicz
  • shashank_jaiswal
  • vishu_1007
  • suhas-cn
  • sahana2104
  • bhoopalt
  • rdevaraj
  • ndi
  • yogeshwari_sevugarathinam
  • shaik_tasneem
  • vkudachi
  • cedric_mascarenhas
  • prashant_singhparihar
  • cn_priyanka14
  • bharathikarunanithi
  • dhanashri027
  • cn-rahul-tiwari
  • cnmanju
  • unviradiya
  • sarthak_mohanty
  • anil.kumag-g
  • sarika_devineni
  • alexcostacondenast
  • cnjuandelgadillo
  • saikatdas-condenast
  • saniyashk
  • ramjeetm
  • andrei-donii
  • monika3596
  • ryadav2
  • rohanatcondenast
  • saicharan7766
  • adri.sh
  • dheeraj.conde
  • vijaya.kapanipathi.rao
  • tarun_conde
  • adam.gibson-condenast
  • yogendra-ramaiah
  • mbeziaev
  • devendradiwakar
  • ganavi_j
  • rananya
  • its_danielle
  • swati_verso
  • k_sardar
  • gargi-c
  • imleodc
  • dguilbault
  • edistel
  • tvandort
  • marcelo-cn
  • alexisicn
  • cnsubrats
  • pavandevireddy
  • katiasfihivogue
  • ssabhishek-condenast
  • pavanasri
  • sandeepkumara
  • skumar3conde
  • juan_alvarez658
  • hisachincn
  • yakshita
  • preetha_cnd
  • vshroti-cn
  • fahad_c
  • anvesharanjan