Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.discuss.tableToXml
on tableToXml (adrstorage, cookie=nil, flIncludeEnclosure=false) {
<<8/15/99; 8:28:26 AM by DW
<<Major overhaul for new discussion group archiving feature.
local (xmltext = "", indentlevel = 0);
on add (s) {
xmltext = xmltext + string.filledString ("\t", indentlevel) + s + "\r"};
on processString (s) {
<<s = string.replaceall (s, "&", "&")
<<s = string.replaceall (s, "\"", "\\\"")
s = string.replaceall (s, "<", "<");
s = string.replaceall (s, "<", "<");
return (s)};
add ("<?xml version=\"1.0\"?>");
add ("<ticket>"); indentlevel++;
add ("<header>"); indentlevel++;
add ("<msgNum>" + adrstorage^.msgnum + "</msgNum>");
local (fldeleted = false);
if defined (adrstorage^.fldeleted) {
fldeleted = adrstorage^.fldeleted;
add ("<flDeleted>" + fldeleted + "</flDeleted>")};
if not fldeleted {
add ("<subject>" + processString (adrstorage^.subject) + "</subject>");
add ("<member>" + adrstorage^.member + "</member>");
if flIncludeEnclosure {
if defined (adrstorage^.enclosureType) { //has an enclosure
add ("<enclosure>"); indentlevel++;
add ("<enclosureAddress>" + adrstorage^.enclosureAddress + "</enclosureAddress>");
add ("<enclosureType>" + adrstorage^.enclosureType + "</enclosureType>");
local (bits); pack (adrstorage^.enclosureBits, @bits); bits = base64.encode (bits, 0);
add ("<enclosureBits>" + bits + "</enclosureBits>");
add ("</enclosure>"); indentlevel--}}};
add ("<postTime>" + date.netstandardstring (adrstorage^.posttime) + "</postTime>");
add ("<ctReads>" + adrstorage^.ctreads + "</ctReads>");
add ("<inResponseTo>" + adrstorage^.inResponseTo + "</inResponseTo>");
if defined (adrstorage^.inNewsSite) {
add ("<inNewsSite>" + adrstorage^.inNewsSite + "</inNewsSite>")};
if defined (adrstorage^.responses) {
if sizeof (adrstorage^.responses) > 0 {
local (item);
add ("<responses>"); indentlevel++;
for item in adrstorage^.responses {
add ("<response>" + item + "</response>")};
add ("</responses>"); indentlevel--}};
if defined (adrstorage^.alsoListedIn) {
if sizeof (adrstorage^.alsoListedIn) > 0 {
local (item);
add ("<alsoListedIn>"); indentlevel++;
for item in adrstorage^.alsoListedIn {
add ("<category>" + item + "</category>")};
add ("</alsoListedIn>"); indentlevel--}};
add ("</header>"); indentlevel--;
if fldeleted {
add ("<body/>")}
else {
add ("<body>" + processString (string (adrstorage^.body)) + "</body>")};
if cookie != nil {
add ("<cookie>" + cookie + "</cookie>")};
add ("</ticket>"); indentlevel--;
return (xmltext)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.