http://weddingin2008.html.533.net/menu.jpg
其中文件这一菜单项在xml文件的内容是:
<MenuItem Label="文件" CssClass="TopMenuItem" CssClassOver="TopMenuItemOver">
<MenuGroup>
<MenuItem Label="新建" LeftIcon="icon_new.gif" LeftIconOver="icon_new_over.gif" LeftIconWidth="20"
ID="i_new" />
<MenuItem Label="打开" LeftIcon="icon_open.gif" LeftIconOver="icon_open_over.gif" RightIcon="arrow_right.gif"
RightIconWidth="15">
<MenuGroup>
<MenuItem Label="Project" LeftIcon="icon_project.gif" LeftIconOver="icon_project_over.gif"
LeftIconWidth="20" ID="i_project" />
<MenuItem Label="Project From Web" LeftIcon="icon_projectFromWeb.gif" LeftIconOver="icon_projectFromWeb_over.gif"
ID="i_projectWeb" />
<MenuItem Label="File" LeftIcon="icon_file.gif" LeftIconOver="icon_file_over.gif" ID="i_file" />
<MenuItem Label="File From Web" LeftIcon="icon_fileFromWeb.gif" LeftIconOver="icon_fileFromWeb_over.gif"
ID="i_fileWeb" />
</MenuGroup>
</MenuItem>
<MenuItem Label="Close" URL="demo.aspx?id=5" />
<MenuItem Image="gray.gif" Height="1" Width="110" CssClass="MenuBreak" CssClassOver="MenuBreak" />
<MenuItem Label="Add New Item" LeftIcon="icon_addNewItem.gif" LeftIconOver="icon_addNewItem_over.gif"
LeftIconWidth="20" ID="i_addNewItem" />
<MenuItem Label="Add Existing Item" LeftIcon="icon_addExistingItem.gif" LeftIconOver="icon_addExistingItem_over.gif"
ID="i_addExistingItem" />
<MenuItem Image="gray.gif" Height="1" Width="110" CssClass="MenuBreak" CssClassOver="MenuBreak" />
<MenuItem Label="Open Solution" LeftIcon="icon_openSolution.gif" LeftIconOver="icon_openSolution_over.gif"
ID="i_openSolution" />
<MenuItem Label="Close Solution" LeftIcon="icon_closeSolution.gif" LeftIconOver="icon_closeSolution_over.gif"
ID="i_closeSolution" />
</MenuGroup>
</MenuItem>

解决方案 »

  1.   

    我的思路是递归子目录和自文件,递归一次,就向xml文件中插入子目录或子文件的节点
      

  2.   

    文件名和目录我都能递归的取到,可就是不会如何正确的写入xml文件.
    谁能告诉我怎么写啊?
      

  3.   

    引自 andrawsky(andrawsky) 的帖子
    1. XML 文档操作 
      1.1 加载一个XML文档 
      Dim objDoc As New XmlDocument() 
      '-- Load xml document Sample.xml 
      objDoc.Load("Sample.xml") 
       
      1.2 加载一个XML数据 
       Dim objDoc As New XmlDocument() 
       Dim strXML As String 
       strXML = "<Employees><Employee id=”12345”><Employee_ID>12345</Employee_ID><Name>Zhang Bin</Name></Employee></Employees>" 
       
       '-- Load xml data 
       objDoc.Load(strXML) 
       
      1.3 保存文档 
      '—Save xml document 
      objDoc.Save("Sample.xml") 
       
      2 XML 数据的查询 
      最常见的XML数据类型有:Element, Attribute,Comment, Text. 
      Element, 指形如<Name>Tom<Name>的节点。它可以包括:Element, Text, Comment, ProcessingInstruction, CDATA, and EntityReference. 
      Attribute, 指在<Employee id=”12345”>中的粗体部分。 
      Comment,指形如:<!-- my comment --> 的节点。 
      Text,指在<Name>Tom<Name>的粗体部分。 
      在XML中,可以用XmlNode对象来参照各种XML数据类型。 
      2.1 查询已知绝对路径的节点(集) 
      objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee”) 
      或者 
      objNodeList = objNode.SelectNodes(“/Company/Department/Employees/Employee”) 
      以上两种方法可返回一个NodeList对象,如果要返回单个节点可使用SelectSingleNode方法,该方法如果查询到一个或多个节点,返回第一个节点;如果没有查询的任何节点返回 Nothing。例如: 
      objNode = objNode.SelectSingleNode(“/Company/Department/Employees/Employee”) 
      If Not (objNode is Nothing) then 
       ‘- Do process 
      End If 
      2.2 查询已知相对路径的节点(集) 
      可使用类似于文件路径的相对路径的方式来查询XML的数据 
      objNode = objDoc.SelectSingleNode(“Company/Department”) 
      objNodeList = objNode.SelectNodes(“../Department) 
      objNode = objNode.SelectNode(“Employees/Employee”) 
      2.3 查询已知元素名的节点(集) 
      在使用不规则的层次文档时,由于不知道中间层次的元素名,可使用//符号来越过中间的节点,查询其子,孙或多层次下的其他所有元素。例如: 
      objNodeList = objDoc.SelectNodes(“Company//Employee”) 
      2.4 查询属性(attribute)节点 
      以上的各种方法都返回元素(element)节点(集),返回属性(attribute),只需要采用相应的方法,在属性名前加一个@符号即可,例如: 
      objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee/@id”) 
      objNodeList = objDoc.SelectNodes(“Company//@id”) 
      2.5 查询Text节点 
      使用text()来获取Text节点。 
      objNode = objDoc.SelectSingleNode(“Company/Department/Deparmt_Name/text()”) 
      2.6 查询特定条件的节点 
      使用[]符号来查询特定条件的节点。例如: 
      a. 返回id号为 10102的Employee节点 
       objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee[@id=’10102’]”) 
      b. 返回Name为Zhang Qi的Name 节点 
       objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee/Name[text()=’Zhang Qi’]”) 
      c. 返回部门含有职员22345的部门名称节点 
      objNode = objDoc.SelectSingleNode("Company/Department[Employees/Employee/@id='22345']/Department_Name") 
      2.7 查询多重模式的节点 
      使用 | 符号可以获得多重模式的节点。例如: 
      objNodeList = objDoc.SelectNodes(“Company/Department/Department_Name | Company/Department/Manager”) 
      2.8 查询任意子节点 
      使用*符号可以返回当前节点的所有子节点。 
      objNodeList = objDoc.SelectNodes(“Company/*/Manager) 
      或者 
      objNodeList = objNode.ChildNodes 
       
      3 XML数据的编辑 
      3.1 增加一个元素的属性(attribute)节点 
      Dim objNodeAttr As XmlNode 
       objNodeAttr = objDoc.CreateAttribute("id", Nothing) 
       objNodeAttr.InnerXml = "101" 
      objNode.Attributes.Append(objNodeAttr) 
      3.2 删除一个元素的属性 
      objNode.Attributes.Remove(objNodeAttr) 
      3.3 增加一个子元素(Element) 
      Dim objNodeChild As XmlNode 
      objNodeChild = objDoc.CreateElement(Nothing, "ID", Nothing) 
      objNodeChild.InnerXml = "101" 
      objNode.AppendChild(objNodeChild) 
      3.4 删除一个子元素 
      objNode.RemoveChild(objNodeChild) 
      3.5 替换一个子元素 
      objNOde.ReplaceChild(newChild,oldChild) 
      

  4.   

    我想知道如何写:这一菜单项,从新建元素,元素中的属性,还有子元素等。:-)
    <MenuItem Label="采购" CssClass="TopMenuItem" CssClassOver="TopMenuItemOver">
    <MenuGroup>
    <MenuItem Label="包装部品" LeftIcon="folderopen.gif" LeftIconOver="folderopen.gif" LeftIconWidth="20"
    ID="i_new" />
    <MenuItem Label="五金电子间接材料" LeftIcon="folderopen.gif" LeftIconOver="folderopen.gif" RightIcon="arrow_right.gif"
    RightIconWidth="15">
    <MenuGroup>
    <MenuItem Label="采购部品到货(变更)联络表-五金、电子、辅料" LeftIcon="excel.gif" LeftIconOver="excel.gif"
    LeftIconWidth="20" ID="i_project" URL="http://www.tom.com"  URLTarget="main"/>
    </MenuGroup>
    </MenuItem>
    <MenuItem Label="www.tom.com"  LeftIcon="html.gif" LeftIconOver="html.gif" URL="http://www.tom.com" URLTarget="main"></MenuItem>
    </MenuGroup>
    </MenuItem>
      

  5.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    XmlDocument xmldoc=new XmlDocument();
    xmldoc.AppendChild(xmldoc.CreateProcessingInstruction("xml","version=\"1.0\""));
    xmldoc.AppendChild(xmldoc.CreateElement("gxsti-news"));
    XmlNode news=xmldoc.DocumentElement.AppendChild(xmldoc.CreateElement("news"));
    buildXmlTree("d:\\Windows CE Tools",xmldoc,news);
    }
    private bool get_Type(string route)
    {
    if(Path.GetExtension(route)!=null)
    return true;//判断该目录下是否有子目录
    else
    return false;
    }
    private void buildXmlTree(string route,XmlDocument xmldoc,XmlNode newsitem)
    {
    string[] str=Directory.GetDirectories(route);//文件夹
    string[] file=Directory.GetFiles(route);//文件
    for(int i=0;i<file.Length;i++)
    {
    XmlNode item=newsitem.AppendChild(xmldoc.CreateElement("item"));
    XmlNode filetype=item.AppendChild(xmldoc.CreateElement("filetype"));
    filetype.InnerText="1";//文件类型
    XmlNode filename=item.AppendChild(xmldoc.CreateElement("filename"));
    filename.InnerText=file[i].Substring(file[i].LastIndexOf("\\")+1,file[i].Length-file[i].LastIndexOf("\\")-1);//文件名称
    }
    for(int i=0;i<str.Length;i++)
    {
    if(get_Type(str[i]))
    {
    XmlNode item=newsitem.AppendChild(xmldoc.CreateElement("item")); XmlNode filetype=item.AppendChild(xmldoc.CreateElement("filetype"));
    filetype.InnerText="0";//文件夹类型
    XmlNode filename=item.AppendChild(xmldoc.CreateElement("filename"));
    filename.InnerText=str[i].Substring(str[i].LastIndexOf("\\")+1,str[i].Length-str[i].LastIndexOf("\\")-1);//文件夹名称
    buildXmlTree(str[i],xmldoc,item);
    }
    }
    XmlTextWriter writer=new XmlTextWriter("d:\\index.xml",null);
    writer.Formatting=Formatting.Indented;
    writer.Indentation=1;
    writer.IndentChar='\t';
    xmldoc.WriteTo(writer);
    writer.Close();
    }
    //将程序考到相应位置就可以用了,记得添加using System.IO;using System.Xml;两个命名空间,跟搂主所要的还有点出入,自己修改一下吧,我只是做个测试而已,至于属性的添加参考以下代码:
    XmlNode newsitem=newsitems.AppendChild(xmldoc.CreateElement("newsitem"));
    XmlAttribute newstype=xmldoc.CreateAttribute("newstype");
    newstype.Value=ds.Tables[0].Rows[i]["id"].ToString();
    ((XmlElement)newsitem).SetAttributeNode(newstype);