<Share version="1.0 Beta">
 <Properties>
  <Owner toolID="ProE" version="Wildfire 5.0" /> 
  <ModelType>Assembly</ModelType> 
  <ModelSubType>Design</ModelSubType> 
  </Properties>
  <ServerPath Name="http://tp052/Model/" /> 
  <ExportData /> 
  <Attributes /> 
 <Parameters>
  <Parameters Name="DESCRIPTION" Type="String" Value="" /> 
  <Parameters Name="MODELED_BY" Type="String" Value="" /> 
  </Parameters>
  <References /> 
  <Dependencys /> 
 <Components>
  <CompFile Name="1.xml" Type="Assembly" /> 
  <CompFile Name="2.xml" Type="Part" /> 
  </Components>
  </Share>怎样取到<Components>
  <CompFile Name="1.xml" Type="Assembly" /> 
  <CompFile Name="2.xml" Type="Part" /> 
  </Components>
中的2个xml呢。。代码如果写?

解决方案 »

  1.   

    var xmlDoc = new XmlDocument();
    xmlDoc.LoadXml("xml内容string");
    XmlNodeList nodes = xmlDoc.GetElementsByTagName("Components/CompFile");
      

  2.   


            static void Main(string[] args)
            {
                XmlDocument xml = new XmlDocument();
                xml.Load("Test.xml");
                XmlNode xn = xml.SelectSingleNode("Share/Components");
                foreach (XmlNode xn1 in xn.ChildNodes)
                {
                    Console.WriteLine(xn1.Attributes["Name"].Value);
                    Console.WriteLine(xn1.Attributes["Type"].Value);
                }
                Console.ReadLine();
            }
      

  3.   

    1.
            string xmlstr = "...";
            XmlDocument xd = new XmlDocument();
            xd.LoadXml(xmlstr);
            XmlNodeList xnl = xd.SelectNodes("Share/Components/CompFile");
            foreach(XmlNode xn in xnl)
            {
                string name = xn.Attributes["Name"].Value;
                string type = xn.Attributes["Type"].Value;
            }
      

  4.   

    使用xpath,类似于正则表达式,只要使用这个 "//Components/CompFile"  就可以获取到节点
      

  5.   


    void Main()
    {
         string xml = @"<Share version=""1.0 Beta"">
     <Properties>
      <Owner toolID=""ProE"" version=""Wildfire 5.0"" />  
      <ModelType>Assembly</ModelType>  
      <ModelSubType>Design</ModelSubType>  
      </Properties>
      <ServerPath Name=""http://tp052/Model/"" />  
      <ExportData />  
      <Attributes />  
     <Parameters>
      <Parameters Name=""DESCRIPTION"" Type=""String"" Value="""" />  
      <Parameters Name=""MODELED_BY"" Type=""String"" Value="""" />  
      </Parameters>
      <References />  
      <Dependencys />  
     <Components>
      <CompFile Name=""1.xml"" Type=""Assembly"" />  
      <CompFile Name=""2.xml"" Type=""Part"" />  
      </Components>
      </Share>";
    XElement xmlPage = XElement.Parse(xml);
     
    var query = from x in xmlPage.Descendants("Components")
                from y in x.Elements("CompFile")
    select new
    {
     name=y.Attribute("Name").Value,
     type=y.Attribute("Type").Value
    };

    foreach(var q in query)
    {
    Console.WriteLine(q.name+"    "+q.type);
    }
    /*
    1.xml    Assembly
    2.xml    Part 
    */
    }
      

  6.   

    2.正则取
            string xmlstr = "...";
            MatchCollection mc = Regex.Matches("(?s)(?<=<Components>.*?<CompFile Name=\")[^\"]*(?=.*?</Components>)");
            foreach (Match m in mc)
            {
                string name = m.Value;
            }
      

  7.   

    额,现在找出来了里边的2个xml了,如何在这里边在进行 找出1.xml和2.xml中的一些呢?是要在循环里嵌套个循环吗? 
      

  8.   


    如何在获取1.xml和2.xml里节点一些属性值呢。假如1.xml中和刚xml里节点内容一样。
      

  9.   


    如何在获取1.xml和2.xml里节点一些属性值呢。假如1.xml中和刚xml里节点内容一样。
    [/Quote]
       
    var query = from x in xmlPage.Descendants("Components")
                            from y in x.Elements("CompFile")
                            //此处加一个where语句即可 
                        select new
                        {
                         name=y.Attribute("Name").Value,
                         type=y.Attribute("Type").Value
                        };
      

  10.   

      C# codevar query = from x in xmlPage.Descendants("Components")
                            from y in x.Elements("CompFile")
             ……
    [/Quote]
    非常感谢,不过你这种语法我没见过呢。
      

  11.   

    linq to xml
    .net 3.5
      

  12.   

     //private static void WXML(ref XmlDocument xml, ref XmlNode root, ref XmlNodeList childlist, ref XmlElement node)
        //{
        //    //初始化一个xml实例
        //   XmlDocument xml = new XmlDocument();    //    //导入指定xml文件
        //    xml.Load(path);
        //    xml.Load(HttpContext.Current.Server.MapPath("../7in10.xml"));    //    //指定一个节点
        //    XmlNode root = xml.SelectSingleNode("/root");    //    //获取节点下所有直接子节点
        //    XmlNodeList childlist = root.ChildNodes;    //    //判断该节点下是否有子节点
        //    root.HasChildNodes;    //    //获取同名同级节点集合
        //    XmlNodeList nodelist = xml.SelectNodes("/Root/News");    //    //生成一个新节点
        //    XmlElement node = xml.CreateElement("News");    //    //将节点加到指定节点下,作为其子节点
        //    root.AppendChild(node);    //    //将节点加到指定节点下某个子节点前
        //    root.InsertBefore(node, root.ChildeNodes[i]);    //    //为指定节点的新建属性并赋值
        //    node.SetAttribute("id", "11111");    //    //为指定节点添加子节点
        //    root.AppendChild(node);    //    //获取指定节点的指定属性值
        //    string id = node.Attributes["id"].Value;    //    //获取指定节点中的文本
        //    string content = node.InnerText;    //    //保存XML文件
        //    xml.Save(path);
        //    xml.Save(HttpContext.Current.Server.MapPath("../7in10.xml"));
        //    //本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liyongjie/archive/2007/04/26/1585213.aspx
        //}
    参考参考,我也是照着这个参考的
      

  13.   

    xdocument doc=xdocument.parse(xml的字符串格式);
    var v = from p in 
    ((IEnumerable)doc.XPathEvaluate("//Components/CompFile/@Name")).Cast<XAttribute>()
     select p.Value;
      

  14.   

    sprc_lcl  的回答貌似比较全面啊