[Groonga-commit] groonga/gcs [master] Add implementation to convert XML SDF batches to JSON

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index