private void RecurseAndAssignNodes( XmlNode elem ) { string attrs = string.Empty; XmlTreeNode addedNode = null; if ( elem.NodeType == XmlNodeType.Element ) { foreach ( XmlAttribute attr in elem.Attributes ) { attrs += " " + attr.Name + "=\"" + attr.Value + "\""; } } if ( elem.Equals( document.DocumentElement ) ) { addedNode = new XmlTreeNode( "<" + elem.Name + attrs + ">", elem ); Nodes.Add( addedNode ); InnerXmlTreeView.CurrentNode = addedNode; Nodes.Add( new XmlTreeNode( "</" + elem.Name + ">", null ) ); } else if ( elem.HasChildNodes && elem.ChildNodes[0].NodeType == XmlNodeType.Text ) { addedNode = new XmlTreeNode( "<" + elem.Name + attrs + ">" + elem.InnerText + "</" + elem.Name + ">", elem ); InnerXmlTreeView.CurrentNode.Nodes.Add( addedNode ); InnerXmlTreeView.CurrentNode = addedNode; } else if ( elem is XmlElement && ( (XmlElement) elem ).IsEmpty ) { addedNode = new XmlTreeNode( "<" + elem.Name + attrs + "/>", elem ); InnerXmlTreeView.CurrentNode.Nodes.Add( addedNode ); InnerXmlTreeView.CurrentNode = addedNode; } else { addedNode = new XmlTreeNode( "<" + elem.Name + attrs + ">", elem ); InnerXmlTreeView.CurrentNode.Nodes.Add( addedNode ); InnerXmlTreeView.CurrentNode = addedNode; InnerXmlTreeView.CurrentNode.Parent.Nodes.Add( new XmlTreeNode( "</" + elem.Name + ">", null ) ); } foreach ( XmlNode child in elem.ChildNodes ) { if ( child.NodeType == XmlNodeType.Element ) { RecurseAndAssignNodes( child ); } else if ( child.NodeType == XmlNodeType.Comment ) { InnerXmlTreeView.CurrentNode.Nodes.Add( new XmlTreeNode( child.OuterXml, child ) ); } } if ( InnerXmlTreeView.CurrentNode.Parent != null ) { InnerXmlTreeView.CurrentNode = InnerXmlTreeView.CurrentNode.Parent; } }
private bool IsNodeVisible (XmlNode node) { // if node list is empty then we process whole document if (xnl == null) return true; // walk thru the list foreach (XmlNode xn in xnl) { if (node.Equals (xn)) return true; } return false; }