现有一个XML文件 aa.xml ,格式如下:
<?xml version="1.0" encoding="UTF-8" ?> 
- <result>
- <head>
  <flag>Login</flag> 
  <cmd>0</cmd> 
  </head>
- <body>
- <tasks>
-    <task>
      <flag>0</flag> 
      <version>20080409</version> 
      <name>站</name> 
-     <menuitems>
      <item id="1" pid="0">基本信息</item> 
      <item id="2" pid="0">机房部分</item> 
      <item id="3" pid="0">B部分</item> 
      <item id="4" pid="0">U部分</item> 
          ......................
          ...........很复杂.......-   </task>
-    </tasks>
-       </body>- </result>
要把<tasks></tasks>之间的字符取出来,生成一个新的XML,<tasks></tasks>之间的结构是未知的,动态变化的,但<tasks></tasks>这个标记是不变的,请问怎么办啊,谢谢

解决方案 »

  1.   

    <task> </task>是这个标记的内容,搞错了,呵呵,而且<tasks> </tasks有很多<task> </task>标记,要把每个<task> </task>都生成不同的XML文件,谢谢各位!
      

  2.   

     doc.Load(@"D:\Project\C#Test\WindowsApplication1\WindowsApplication2\XMLFile3.xml");            XmlNode node = doc.SelectSingleNode("/tasks/*");
      

  3.   

    kao打错了 是
    doc.SelectNodes用xmlpath就可以实现
      

  4.   

    Dim doc As New XmlDocument()
    doc.Load("aa.xml")
    Dim elemList As XmlNodeList = doc.GetElementsByTagName("task")Dim i As Integer
    For i = 0 To elemList.Count - 1
       Console.WriteLine(elemList(i).InnerXml)
    Next i
      

  5.   

                XmlDocument xmlOld = new XmlDocument();
                xmlOld.Load(@"C:\XMLFile1.xml");
                XmlDocument xmlNew = new XmlDocument();
                xmlNew.LoadXml(xmlOld["result"]["body"]["tasks"].InnerXml);            MessageBox.Show(xmlNew.InnerXml);
      

  6.   

    一个很笨的方法:
    1.加载XmlDocument,并导航到Tasks节点
    2.定位到XmlDocument对象的根节点,把1中得到节点对象添加进来。
    3.删除Doc根节点中除2新添加的节点以外的所有子节点。
    4.保存XmlDocument对象到一个文件中。
      

  7.   

    1.首先,先把tasks节点查出来
    XmlNode node=XmlDoc.SelectSingleNode("//tasks");
    2.把节点及其子节点保存到XMLWRITER中,在生成新的XML时,把此WRITER放入合适的位置即可。
    XmlTextWriter writer = new XmlTextWriter(Console.Out);
        writer.Formatting = Formatting.Indented;
        node.WriteContentTo(writer);
      

  8.   


            #region XMLDocument方法
            /// <summary>
            /// 给定一个节点的xPath表达式并返回一个节点
            /// </summary>
            /// <param name="node"></param>
            /// <returns></returns>
            public XmlNode FindNode(string xPath)
            {
                XmlNode xmlNode = this.SelectSingleNode(xPath);
                return xmlNode;
            }
            /// <summary>
            /// 给定一个节点的xPath表达式返回其值
            /// </summary>
            /// <param name="xPath"></param>
            /// <returns></returns>
            public string GetNodeValue(string xPath)
            {
                XmlNode xmlNode = this.SelectSingleNode(xPath);
                return xmlNode.InnerText;
            }        public void SetNodeValue(string xPath, string NewValue)
            {
                XmlNode xmlNode = this.SelectSingleNode(xPath);
                xmlNode.InnerText = NewValue;
                this.Save(tXMLPath);
            }        public void SetNodeListValue(string xPath, ArrayList al)
            {
                XmlNode xmlNode = this.SelectSingleNode(xPath);
                xmlNode.RemoveAll();
                this.Save(tXMLPath);
                foreach (string fileName in al)
                {
                    XmlElement xesub1 = this.CreateElement("Name");
                    xesub1.InnerText = fileName;
                    xmlNode.AppendChild(xesub1);
                }
                this.Save(tXMLPath);
            }
            #endregion
      

  9.   

    XmlDocument doc = new XmlDocument();
                doc.Load("c:\\test.xml");
                XmlNodeList nodelist = doc.SelectNodes("result/tasks/task");
                int i=0;
                foreach (XmlNode node in nodelist)
                {
                    XmlDocument tmpdoc = new XmlDocument();
                    tmpdoc.LoadXml(node.OuterXml);
                    
                    XmlDeclaration dec = tmpdoc.CreateXmlDeclaration("1.0", "utf-8", null);
                    tmpdoc.InsertBefore(dec, tmpdoc.FirstChild);
                    
                    tmpdoc.Save("c:\\a" + i++ + ".xml");
                }