public static XmlDocument GetPersonalizationXml(HttpContext context, Page pageNode)
{
XmlDocument xml = new XmlDocument();
xml.AppendChild(xml.CreateElement("webPartZones"));
string virtualPath = CreateVirtualPath(pageNode.Path);
PageBase page = InstantiatePage(context, virtualPath, pageNode);
page.PreLoad += delegate
{
WebPartManager wpm = WebPartManager.GetCurrentWebPartManager(page);
WebPartZoneCollection webPartZones = wpm.Zones;
foreach (WebPartZone zone in webPartZones)
{
XmlElement zoneElement = xml.CreateElement("webPartZone");
XmlAttribute zoneId = xml.CreateAttribute("id");
zoneId.Value = zone.ID;
zoneElement.SetAttributeNode(zoneId);
xml.DocumentElement.AppendChild(zoneElement);
WebPartCollection webParts = zone.WebParts;
foreach (WebPart webPart in webParts)
{
if (!webPart.IsStatic)
{
XmlDocument xmlFragment = new XmlDocument();
using (StringWriter sw = new StringWriter())
{
using (XmlWriter writer = new XmlTextWriter(sw))
{
webPart.ExportMode = WebPartExportMode.All; // Force exporting of all information
wpm.ExportWebPart(webPart, writer);
writer.Flush();
}
xmlFragment.LoadXml(sw.ToString());
}
zoneElement.AppendChild(xml.ImportNode(xmlFragment.FirstChild.FirstChild, true));
}
}
}
};
ExecutePage(context, virtualPath, page, pageNode, true);
return xml;
}