I have now implemented IPortable for the help Module. This was a bit more tricky than I thought because its not exporting or importing to a single module but to 2 modules. this is because the Category Tree and the Tutorial List are 2 separate modules.
The way it works is it iterates through all the categories and adds them to the XML document while maintaining the structure of the tree. Like so.
<content type="Help" version="01.00.00">
<Update>
<Categories>
<Category>
<CategoryGUID>688a4c77-79e9-4783-9f77-f2bfe4318036</CategoryGUID>
<Description>Introduction to DotNetNuke Imported from here</Description>
<Level>1</Level>
<Name>Introduction</Name>
<Order>0</Order>
<Tutorials>
<Tutorial>
I used a recursive routine similar to how i populate the tree to do this.
You will see there is a GUID, this is on both the Category and the tutorial so that when you import this XML it will only add new records if the record doesnt already exist. It tests whether the record exists in the sproc and either updates or adds the record. this means that a content admin like Lorraine can do the updates locally on a loca DNN site, export the content and then import it to a remote site. Which makes her more productive.
I am not dealing with images in this release. So as the admin you would need to keep a duplicate file structure on your local machine and add the images you are adding to this file structure. Then when ready to export you also create a zip file of the new images which is then uploaded to the remote site and the zip file will add the images to the remote site in the correct file structure for teh content in the HTML.
Next release I will try to figure a way of scanning the local file system and automatically creating the zip file for you.