From 157ca678dee75e7881a0198425d0c8328f0bee04 Mon Sep 17 00:00:00 2001 From: jsdelfino Date: Thu, 3 Jan 2013 07:41:02 +0000 Subject: Improve handling of nested lists, trees, null and floating point values. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1428191 13f79535-47bb-0310-9956-ffa450edef68 --- sca-cpp/trunk/modules/rss/rss.hpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'sca-cpp/trunk/modules/rss/rss.hpp') diff --git a/sca-cpp/trunk/modules/rss/rss.hpp b/sca-cpp/trunk/modules/rss/rss.hpp index 7fba736065..348d50e8f3 100644 --- a/sca-cpp/trunk/modules/rss/rss.hpp +++ b/sca-cpp/trunk/modules/rss/rss.hpp @@ -45,15 +45,16 @@ const value entry("entry"); * Convert a list of elements to a list of element values representing an RSS entry. */ const list entryElementValues(const list& e) { - const list lt = filter(selector(mklist(element, "title")), e); + const list lt = elementChildren("title", e); const value t = isNil(lt)? value(emptyString) : elementValue(car(lt)); - const list li = filter(selector(mklist(element, "link")), e); + const list li = elementChildren("link", e); const value i = isNil(li)? value(emptyString) : elementValue(car(li)); - const list ld = filter(selector(mklist(element, "description")), e); + const list ld = elementChildren("description", e); return append(nilListValue + element + entry + value(nilListValue + element + value("title") + t) + value(nilListValue + element + value("id") + i), - isNil(ld)? nilListValue : mklist(value(nilListValue + element + value("content") + elementValue(car(ld))))); + isNil(ld)? nilListValue : isAttribute(elementValue(car(ld)))? nilListValue : + mklist(value(nilListValue + element + value("content") + elementValue(car(ld))))); } /** @@ -91,10 +92,10 @@ const failable > readRSSFeed(const list& ilist) { const list f = content(xml::readElements(ilist)); if (isNil(f)) return mkfailure >("Empty feed"); - const list c = filter(selector(mklist(element, "channel")), car(f)); - const list t = filter(selector(mklist(element, "title")), car(c)); - const list i = filter(selector(mklist(element, "link")), car(c)); - const list e = filter(selector(mklist(element, "item")), car(c)); + const list c = elementChildren("channel", car(f)); + const list t = elementChildren("title", car(c)); + const list i = elementChildren("link", car(c)); + const list e = elementChildren("item", car(c)); return mklist(append(nilListValue + element + feed + value(nilListValue + element + value("title") + elementValue(car(t))) + value(nilListValue + element + value("id") + elementValue(car(i))), @@ -150,9 +151,9 @@ const failable > writeRSSEntry(const list& l) { */ template const failable writeRSSFeed(const lambda& reduce, const R& initial, const list& ll) { const list l = isNil(ll)? ll : (list)car(ll); - const list lt = filter(selector(mklist(element, "title")), l); + const list lt = elementChildren("title", l); const value t = isNil(lt)? value(emptyString) : elementValue(car(lt)); - const list li = filter(selector(mklist(element, "id")), l); + const list li = elementChildren("id", l); const value i = isNil(li)? value(emptyString) : elementValue(car(li)); const list c = nilListValue + (nilListValue + element + "title" + t) @@ -160,7 +161,7 @@ template const failable writeRSSFeed(const lambda le = filter(selector(mklist(element, entry)), l); + const list le = elementChildren(entry, l); if (isNil(le)) { const list fe = nilListValue + element + "rss" + (nilListValue + attribute + "version" + "2.0") -- cgit v1.2.3