转换成XmlDocument

为了把有层次关系的数据邦定到树型控件或者菜单控件时,经常需要用到XmlDocument,因为数据源不是xml文件,而是保存到表中,通常这种表的字段会有一个ID和一个父ID,如果返回的一个数组,则我们需要把具有层次关系的数组转换成为XmlDocument然后邦定到控件上。

首先,先添加两个方法用来获取根节点下的一级子节点,以及获取某节点下的一级节点。
如:
public PMBSCClass[] GetSubPMBSCClasses(Guid enterpriseUID, Guid bscClassUID)
public PMBSCClass[] GetRootPMBSCClasses(Guid enterpriseUID)

然后,是两个辅助转换的方法:
        public XmlDocument GetBscXmlDocment(Guid enterpriseUID)
        
{
            XmlDocument doc 
= new XmlDocument();

            XmlDeclaration declare 
= doc.CreateXmlDeclaration("1.0""UTF-8""yes");//创建一个声明
            doc.InsertBefore(declare, doc.DocumentElement);//把声明添加到文档元素的顶部

            XmlElement root 
= doc.CreateElement("Nodes");//添加根节点
            doc.AppendChild(root);

            PMBSCClass[] rootBscs 
= GetRootPMBSCClasses(enterpriseUID);
            
if(rootBscs != null && rootBscs.Length > 0)
            
{
                MakeDoc(doc, root, rootBscs);
            }


            
            
            
return doc;
        }

        
private void MakeDoc(XmlDocument doc, XmlElement rootElem, PMBSCClass[] bscs)
        
{
            
foreach(PMBSCClass bsc in bscs)
            
{
                
//创建子节点
                XmlElement elem = doc.CreateElement("ItemNode");
                rootElem.AppendChild(elem);

                
//创建新节点的Text属性
                XmlAttribute textAtt = doc.CreateAttribute("Text");
                textAtt.Value 
= bsc.Name;
                elem.SetAttributeNode(textAtt);

                
//创建新节点的Value属性
                XmlAttribute valueAtt = doc.CreateAttribute("Value");
                valueAtt.Value 
= bsc.BSCClassUID.ToString();
                elem.SetAttributeNode(valueAtt);

                PMBSCClass[] subBscs 
= GetSubPMBSCClasses(bsc.EnterpriseUID, bsc.BSCClassUID);
                
if(subBscs != null && subBscs.Length > 0)
                
{
                    
//如果当前元素有子元素,则递归生成字的节子点。
                    MakeDoc(doc, elem, subBscs);
                }

            }

        }


原文地址:https://www.cnblogs.com/chenjunbiao/p/1760268.html