<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
  <ModulePermit>
    <Mast Code="S001" Name="系统维护" Index="1">
      <Sub Code="S00101" Name="地区管理" Index="1"></Sub>
      <Sub Code="S00102" Name="管理员管理" Index="2"></Sub>
    </Mast>
    <Mast Code="S002" Name="业务管理" Index="2">
      <Sub Code="S00201" Name="收货管理" Index="1"></Sub>
      <Sub Code="S00202" Name="发货管理" Index="2"></Sub>
      <Sub Code="S00203" Name="报表管理" Index="3"></Sub>
    </Mast>
  </ModulePermit>
</Configuration>System.Xml.XmlNodeList list = xml.SelectNodes("Configuration/ModulePermit/Mast");
我把这些xml数据全部读进DataTable了,但是应该怎样按照Index进行排序呢?

解决方案 »

  1.   

    你可以读取xml的时候先判断它的index的值啊 再放进DataTable不就是有序的了吗
      

  2.   

    linq to xml 
    参考:XElement root = XElement.Load("Data.xml");
    IEnumerable<decimal> prices =
        from el in root.Elements("Data")
        let price = (decimal)el.Element("Price")
        orderby price
        select price;
    foreach (decimal el in prices)
        Console.WriteLine(el);
      

  3.   

                string xml = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
    <Configuration>
      <ModulePermit>
        <Mast Code=""S001"" Name=""系统维护"" Index=""1"">
          <Sub Code=""S00101"" Name=""地区管理"" Index=""1""></Sub>
          <Sub Code=""S00102"" Name=""管理员管理"" Index=""2""></Sub>
        </Mast>
        <Mast Code=""S002"" Name=""业务管理"" Index=""2"">
          <Sub Code=""S00201"" Name=""收货管理"" Index=""1""></Sub>
          <Sub Code=""S00202"" Name=""发货管理"" Index=""2""></Sub>
          <Sub Code=""S00203"" Name=""报表管理"" Index=""3""></Sub>
        </Mast>
      </ModulePermit>
    </Configuration>";            XDocument doc = XDocument.Parse(xml);
                var Query = from D in doc.Element("Configuration").Element("ModulePermit").DescendantNodes()
                            orderby XElement.Parse(D.ToString()).Attribute("Index").Value
                            select new
                            {
                                Code = XElement.Parse(D.ToString()).Attribute("Code").Value,
                                Name = XElement.Parse(D.ToString()).Attribute("Code").Value,
                                Index = XElement.Parse(D.ToString()).Attribute("Index").Value
                            };
                foreach (var v in Query)
                {
                    Console.WriteLine("Code={0}     Name={1}       Inex={2}",v.Code,v.Name,v.Index);
                }
                /*
                Code=S001     Name=S001       Inex=1
                Code=S00101     Name=S00101       Inex=1
                Code=S00201     Name=S00201       Inex=1
                Code=S00102     Name=S00102       Inex=2
                Code=S002     Name=S002       Inex=2
                Code=S00202     Name=S00202       Inex=2
                Code=S00203     Name=S00203       Inex=3
                */
      

  4.   

                XDocument doc = XDocument.Parse(xml);
                var Query = from D in doc.Element("Configuration").Element("ModulePermit").DescendantNodes()
                            let Index = XElement.Parse(D.ToString()).Attribute("Index").Value
                            let Code = XElement.Parse(D.ToString()).Attribute("Code").Value
                            orderby Index, Code
                            select new
                            {
                                Code = Code,
                                Name = XElement.Parse(D.ToString()).Attribute("Name").Value,
                                Index = Index
                            };
      

  5.   

    当到DataTable中,然后用DataView排序