[XML-SIG] Bookmark merging script
uche.ogbuji@fourthought.com
uche.ogbuji@fourthought.com
Fri, 10 Sep 1999 13:21:27 -0400
This is a multipart MIME message.
--==_Exmh_-21429583430
Content-Type: text/plain; charset=us-ascii
Again, if anyone is interested, here is a script to merge two XBEL bookmark
files somewhat intelligently. It merges folders with the same name
recursively, etc. I'm still working on adding a little more intelligence, so
if anyone is interested, please e-mail me.
--
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_-21429583430
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
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_-21429583430--