From 55b032e357bd6f3cb2f05415da4baffba8d44c73 Mon Sep 17 00:00:00 2001 From: Ratchanan Srirattanamet Date: Thu, 16 May 2019 16:14:00 +0700 Subject: [PATCH] builder: support building Date object Xml2Js is made to support outputting Date object as XML's dateTime, which is an ISO8601 format string. So, Date's toISOString() is used. --- lib/builder.js | 2 ++ src/builder.coffee | 8 ++++++-- test/builder.test.coffee | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/builder.js b/lib/builder.js index 58f36384..6de00714 100644 --- a/lib/builder.js +++ b/lib/builder.js @@ -96,6 +96,8 @@ element = render(element.ele(key), entry).up(); } } + } else if (child instanceof Date) { + element = element.ele(key, child.toISOString()).up(); } else if (typeof child === "object") { element = render(element.ele(key), child).up(); } else { diff --git a/src/builder.coffee b/src/builder.coffee index 5653fde0..f8bc7d6c 100644 --- a/src/builder.coffee +++ b/src/builder.coffee @@ -80,11 +80,15 @@ class exports.Builder else element = render(element.ele(key), entry).up() - # Case #4 Objects + # Case #4 Date objects + else if child instanceof Date + element = element.ele(key, child.toISOString()).up() + + # Case #5 Objects else if typeof child is "object" element = render(element.ele(key), child).up() - # Case #5 String and remaining types + # Case #6 String and remaining types else if typeof child is 'string' && @options.cdata && requiresCDATA child element = element.ele(key).raw(wrapCDATA child).up() diff --git a/test/builder.test.coffee b/test/builder.test.coffee index e9c12be3..cf688d7d 100644 --- a/test/builder.test.coffee +++ b/test/builder.test.coffee @@ -281,3 +281,17 @@ module.exports = actual = builder.buildObject obj diffeq expected, actual test.finish() + + 'test building Date object': (test) -> + expected = """ + + + 2001-10-26T21:32:52.126Z + + + """ + builder = new xml2js.Builder() + obj = { "xml": { "DateTime": new Date("2001-10-26T21:32:52.126Z") } } + actual = builder.buildObject obj + diffeq expected, actual + test.finish()