[XML-SIG] Small Update, re: Bookmark merging script

uche.ogbuji@fourthought.com uche.ogbuji@fourthought.com
Fri, 10 Sep 1999 14:57:51 -0400


This is a multipart MIME message.

--==_Exmh_-18396449480
Content-Type: text/plain; charset=us-ascii

This version should work better.


-- 
Uche Ogbuji
FourThought LLC, IT Consultants
uche.ogbuji@fourthought.com	(970)481-0805
Software engineering, project management, Intranets and Extranets
http://FourThought.com		http://OpenTechnology.org


--==_Exmh_-18396449480
Content-Type: text/plain ; name="merge_bookmarks.py"; charset=us-ascii
Content-Description: merge_bookmarks.py
Content-Disposition: attachment; filename="merge_bookmarks.py"

#!/usr/bin/env python
import string
from Ft.Dom import Dom
from Ft.Dom import Node
from Ft.Dom import NodeIterator
from Ft.Dom import Ext
from Ft.Dom.Ext import Builder

def MergeFolders(folderNode1, folderNode2):
    folder1_folders = filter(lambda x: x.getNodeName() == 'folder', folder1.getChildNodes())
    for elem in folderNode2.getChildNodes():
        if elem.getNodeName() == 'title':
            continue
        elif elem.getNodeName() == 'folder':
            title = string.strip(elem.getElementsByTagName('title')[0].getFirstChild().getNodeValue())
            for a_folder in folder1_folders:
                if title == string.strip(a_folder.getElementsByTagName('title')[0].getFirstChild().getNodeValue()):
                    MergeFolders(a_folder, elem)
        else:
            folderNode1.appendChild(elem)


def XbelMerge(xbel1, xbel2):
    xbel1_top_level = filter(lambda x: x.getNodeType() == Node.ELEMENT_NODE, xbel1.getDocumentElement().getChildNodes())
    xbel1_top_level_folders = filter(lambda x: x.getNodeName() == 'folder', xbel1_top_level)
    xbel1_top_level_bookmarks = filter(lambda x: x.getNodeName() == 'bookmark', xbel1_top_level)

    xbel2_top_level = filter(lambda x: x.getNodeType() == Node.ELEMENT_NODE, xbel2.getDocumentElement().getChildNodes())
    for elem in xbel2_top_level:
        if elem.getNodeName() == 'folder':
            title = string.strip(elem.getElementsByTagName('title')[0].getFirstChild().getNodeValue())
            for a_folder in xbel1_top_level_folders:
                if title == string.strip(a_folder.getElementsByTagName('title')[0].getFirstChild().getNodeValue()):
                    MergeFolders(a_folder, elem)
                else:
                    a_folder.appendChild(elem)
    return xbel1


if __name__ == "__main__":
    import sys
    xbel1 = Builder.FromXmlUrl(sys.argv[1], validate=1)
    xbel2 = Builder.FromXmlUrl(sys.argv[2], validate=1)
    new_xbel = XbelMerge(xbel1, xbel2)
    Ext.PrettyPrint(new_xbel, indent='  ')
    Ext.ReleaseNode(new_xbel)
    Ext.ReleaseNode(xbel1)
    Ext.ReleaseNode(xbel2)

--==_Exmh_-18396449480--