private void processNodeList(ContentItem contentItem, TreeNodeCollection tnCollection) { var xmlDocument = new XmlDocument(); var nsm = new XmlNamespaceManager(xmlDocument.NameTable); nsm.AddNamespace("toc", "urn:mtpg-com:mtps/2004/1/toc"); nsm.AddNamespace("mtps", "http://msdn2.microsoft.com/mtps"); nsm.AddNamespace("asp", "http://msdn2.microsoft.com/asp"); nsm.AddNamespace("mshelp", "http:/msdn.microsoft.com/mshelp"); if (string.IsNullOrEmpty(contentItem.Toc)) return; xmlDocument.LoadXml(contentItem.Toc); var nodes = xmlDocument.SelectNodes("/toc:Node/toc:Node", nsm); if (nodes == null) return; foreach (XmlNode node in nodes) { var title = GetAttribute(node.Attributes["toc:Title"]); var target = HttpUtility.UrlDecode(GetAttribute(node.Attributes["toc:Target"])); var targetLocale = GetAttribute(node.Attributes["toc:TargetLocale"]); var targetVersion = GetAttribute(node.Attributes["toc:TargetVersion"]); var subTree = HttpUtility.UrlDecode(GetAttribute(node.Attributes["toc:SubTree"])); var subTreeVersion = GetAttribute(node.Attributes["toc:SubTreeVersion"]); var subTreeLocale = GetAttribute(node.Attributes["toc:SubTreeLocale"]); var isPhantom = GetAttribute(node.Attributes["toc:IsPhantom"]); if (isPhantom != "true" && title != "@PhantomNode" && title != "@NoTitle" && string.IsNullOrEmpty(title) != true && string.IsNullOrEmpty(target) != true) { TreeNode treeNode = tnCollection.Add(title); var mtpsNode = new MtpsNode(subTree, subTreeLocale, subTreeVersion,contentItem.ContentId, target, targetLocale, targetVersion, title); treeNode.Tag = mtpsNode; // Mark nodes red that point outside this server if (mtpsNode.External) { treeNode.ForeColor = Color.Red; //treeNode.NodeFont = new System.Drawing.Font(tocControl.Font, System.Drawing.FontStyle.Italic); } if (subTree != null) { // Add a + as the title so any node with subnodes is expandable. // Only load the subnodes when user expands this node. // We rely on Tag == null rather than Text == "+" in case // there really is a node with a title of "+". treeNode.Nodes.Add("+"); } } else { if (subTree != null) { // TODO: add a ContentItem constructor that takes a combined // version string: MSDN.10, Office.12, etc. string[] splitVersion = subTreeVersion.Split(new[] {'.'}); var childContentItem = new ContentItem(subTree, subTreeLocale,splitVersion[1], splitVersion[0], ApplicationStrings.APPLICATION_NAME); childContentItem.Load(false); processNodeList(childContentItem, tnCollection); } } } }
private void processNodeList(ContentItem contentItem, TreeNodeCollection tnCollection) { var xmlDocument = new XmlDocument(); var nsm = new XmlNamespaceManager(xmlDocument.NameTable); nsm.AddNamespace("toc", "urn:mtpg-com:mtps/2004/1/toc"); nsm.AddNamespace("mtps", "http://msdn2.microsoft.com/mtps"); nsm.AddNamespace("asp", "http://msdn2.microsoft.com/asp"); nsm.AddNamespace("mshelp", "http:/msdn.microsoft.com/mshelp"); if (string.IsNullOrEmpty(contentItem.Toc)) { return; } xmlDocument.LoadXml(contentItem.Toc); var nodes = xmlDocument.SelectNodes("/toc:Node/toc:Node", nsm); if (nodes == null) { return; } foreach (XmlNode node in nodes) { var title = GetAttribute(node.Attributes["toc:Title"]); var target = HttpUtility.UrlDecode(GetAttribute(node.Attributes["toc:Target"])); var targetLocale = GetAttribute(node.Attributes["toc:TargetLocale"]); var targetVersion = GetAttribute(node.Attributes["toc:TargetVersion"]); var subTree = HttpUtility.UrlDecode(GetAttribute(node.Attributes["toc:SubTree"])); var subTreeVersion = GetAttribute(node.Attributes["toc:SubTreeVersion"]); var subTreeLocale = GetAttribute(node.Attributes["toc:SubTreeLocale"]); var isPhantom = GetAttribute(node.Attributes["toc:IsPhantom"]); if (isPhantom != "true" && title != "@PhantomNode" && title != "@NoTitle" && string.IsNullOrEmpty(title) != true && string.IsNullOrEmpty(target) != true) { TreeNode treeNode = tnCollection.Add(title); var mtpsNode = new MtpsNode(subTree, subTreeLocale, subTreeVersion, contentItem.ContentId, target, targetLocale, targetVersion, title); treeNode.Tag = mtpsNode; // Mark nodes red that point outside this server if (mtpsNode.External) { treeNode.ForeColor = Color.Red; //treeNode.NodeFont = new System.Drawing.Font(tocControl.Font, System.Drawing.FontStyle.Italic); } if (subTree != null) { // Add a + as the title so any node with subnodes is expandable. // Only load the subnodes when user expands this node. // We rely on Tag == null rather than Text == "+" in case // there really is a node with a title of "+". treeNode.Nodes.Add("+"); } } else { if (subTree != null) { // TODO: add a ContentItem constructor that takes a combined // version string: MSDN.10, Office.12, etc. string[] splitVersion = subTreeVersion.Split(new[] { '.' }); var childContentItem = new ContentItem(subTree, subTreeLocale, splitVersion[1], splitVersion[0], ApplicationStrings.APPLICATION_NAME); childContentItem.Load(false); processNodeList(childContentItem, tnCollection); } } } }