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, "<", "&lt;");
		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.