YUKI Hiroshi
null+****@clear*****
Mon Dec 10 17:02:22 JST 2012
YUKI Hiroshi 2012-12-10 17:02:22 +0900 (Mon, 10 Dec 2012) New Revision: bbb1626b1904c6a601764f68c30710b68359c5fb https://github.com/groonga/gcs/commit/bbb1626b1904c6a601764f68c30710b68359c5fb Log: Add implementation to convert XML SDF batches to JSON Added files: lib/batch/xml.js test/fixture/companies/add.sdf.xml test/fixture/companies/delete.sdf.xml Added: lib/batch/xml.js (+57 -0) 100644 =================================================================== --- /dev/null +++ lib/batch/xml.js 2012-12-10 17:02:22 +0900 (b0238ed) @@ -0,0 +1,57 @@ +var xml2js = require('xml2js'); + +function _toJSON(xml) { + var parser = new xml2js.Parser({ + explicitRoot: true + }); + var json; + parser.addListener('end', function(result) { + json = result; + }); + try { + parser.parseString(xml); + } catch (e) { + console.log(xml); + throw e; + } + return json; +} + +function toJSON(xml) { + var batches = []; + var json = _toJSON(xml); + if (json.batch.add) { + if (!Array.isArray(json.batch.add)) + json.batch.add = [json.batch.add]; + json.batch.add.forEach(function(item) { + var batch = { + type: 'add', + id: item['@'].id, + version: item['@'].version, + lang: item['@'].lang, + fields: {} + }; + var fields = item.field; + if (!Array.isArray(fields)) fields = [fields]; + fields.forEach(function(field) { + batch.fields[field['@'].name] = field['#']; + }); + batches.push(batch); + }); + } + if (json.batch.delete) { + if (!Array.isArray(json.batch.delete)) + json.batch.delete = [json.batch.delete]; + json.batch.delete.forEach(function(item) { + var batch = { + type: 'delete', + id: item['@'].id, + version: item['@'].version + }; + batches.push(batch); + }); + } + return batches; +} + +exports.toJSON = toJSON; Added: test/fixture/companies/add.sdf.xml (+73 -0) 100644 =================================================================== --- /dev/null +++ test/fixture/companies/add.sdf.xml 2012-12-10 17:02:22 +0900 (e2cf9dc) @@ -0,0 +1,73 @@ +<?xml version="1.0"?> +<batch> + <add id="id1" version="1" lang="en"> + <field name="name">Brazil</field> + <field name="address">Shibuya, Tokyo, Japan</field> + <field name="email_address">info �� razil.jp</field> + <field name="age">1</field> + <field name="product">groonga</field> + </add> + <add id="id2" version="1" lang="en"> + <field name="name">Enishi Tech Inc.</field> + <field name="address">Sapporo, Hokkaido, Japan</field> + <field name="email_address">info �� enishi-tech.com</field> + <field name="age">2</field> + <field name="product">groonga</field> + </add> + <add id="id3" version="1" lang="en"> + <field name="name">ClearCode Inc.</field> + <field name="address">Hongo, Tokyo, Japan</field> + <field name="email_address">info �� clear-code.com</field> + <field name="age">3</field> + <field name="product">groonga</field> + </add> + <add id="id4" version="1" lang="en"> + <field name="name">Anaheim Electronics</field> + <field name="address">Granada, Moon</field> + <field name="email_address"></field> + <field name="age">4</field> + <field name="product">gundam</field> + </add> + <add id="id5" version="1" lang="en"> + <field name="name">Shinsei Industry</field> + <field name="address">Earth</field> + <field name="email_address"></field> + <field name="age">5</field> + <field name="product">valkyrie</field> + </add> + <add id="id6" version="1" lang="en"> + <field name="name">Omni Consumer Products</field> + <field name="address">Detroit and Delta City, Michigan, United States</field> + <field name="email_address"></field> + <field name="age">6</field> + <field name="product">robocop</field> + </add> + <add id="id7" version="1" lang="en"> + <field name="name">Capsule Corporation</field> + <field name="address">West City</field> + <field name="email_address"></field> + <field name="age">7</field> + <field name="product">time machine</field> + </add> + <add id="id8" version="1" lang="en"> + <field name="name">Stark Industries</field> + <field name="address">United States</field> + <field name="email_address"></field> + <field name="age">8</field> + <field name="product">iron man</field> + </add> + <add id="id9" version="1" lang="en"> + <field name="name">Umbrella Corporation</field> + <field name="address">Tokyo, Japan</field> + <field name="email_address"></field> + <field name="age">9</field> + <field name="product">tyrant</field> + </add> + <add id="id10" version="1" lang="en"> + <field name="name">U.S. Robots and Mechanical Men</field> + <field name="address">New York, United States</field> + <field name="email_address"></field> + <field name="age">10</field> + <field name="product">ndr114</field> + </add> +</batch> Added: test/fixture/companies/delete.sdf.xml (+4 -0) 100644 =================================================================== --- /dev/null +++ test/fixture/companies/delete.sdf.xml 2012-12-10 17:02:22 +0900 (a1a86f2) @@ -0,0 +1,4 @@ +<?xml version="1.0"?> +<batch> + <delete id="id1" version="2"/> +</batch> -------------- next part -------------- HTML����������������������������... Télécharger