public bool CreateNode(XmlNode Node)
        {
            UserInFo User = new UserInFo();
            foreach (XmlNode Read in Node)
            {
                if (Read.Name == "User_ID")
                {
                    User.U_ID = Read.InnerText;
                }
                if (Read.Name == "User_Name")
                {
                    User.U_Name = Read.InnerText;
                }
                if (Read.Name == "Password")
                {
                    User.U_Password = Read.InnerText;
                }
                if (Read.Name == "TokenPIN")
                {
                    User.U_TokenPIN = Read.InnerText;
                }
                if (Read.Name == "FullName")
                {
                    User.U_FullName = Read.InnerText;
                }
            }
            if (User.U_Name != null && User.U_Password != null && User.U_TokenPIN != null)
            {
                User_Array.Add(User);
            }            return true;
        }按我现在的取法 假设我区 ID 为 001 的对象值
  <User>
    <User_ID>001</User_ID>
    <User_Name>aaa </User_Name>
    <Password>n</Password>
    <TokenPIN>5566</TokenPIN>
    <FullName>ailsa</FullName>
 </User>
 那么 要循环 5次 才能取完
这样查找效率很低,能不能一下就能取出XML文件中 某个对象的所有值 。
xml文件:
<?xml version="1.0" encoding="utf-8"?>
<UserFileNurse>
  <User>
    <User_ID>001</User_ID>
    <User_Name>aaa </User_Name>
    <Password>n</Password>
    <TokenPIN>5566</TokenPIN>
    <FullName>ailsa</FullName>
 </User>
  <User>
    <User_ID>002</User_ID>
    <User_Name>bbb</User_Name>
    <Password>a</Password>
    <TokenPIN>5986</TokenPIN>
    <FullName>amanda</FullName>
 </User>
  <User>
    <User_ID>003</User_ID>
    <User_Name>ccc</User_Name>
    <Password>b</Password>
    <TokenPIN>2366</TokenPIN>
    <FullName>crystal</FullName>
 </User>
</UserFileNurse>

解决方案 »

  1.   

    用xpath啊
    XmlDocument doc = new XmlDocument();
    doc.loadxml();
    XmlNode n ;
    n = doc.DocumentElement.SelectSingleNode("//User[UserID='User_ID']");
    User.U_ID = n.ChildNodes[0].InnerText; 
      

  2.   

    反序列化呀
    class User
    {
        User_ID;
        User_Name;
        Password;
        TokenPIN;
        FullName;
    }
    ......
      

  3.   

    FilePath = "XML/PatientInfo.xml";
                PatientManager My_Node = new PatientManager();
                XmlDocument Xmldoc = new XmlDocument();
                Xmldoc.Load(FilePath);
                XmlNodeList Nodelist = Xmldoc.DocumentElement.ChildNodes;
                //XmlNodeList Nodelist = Xmldoc.SelectSingleNode("Group").ChildNodes;
                
                foreach (XmlNode XNode in Nodelist)
                {
                    My_Node.CreateNode(XNode); //这里调用下面的方法 点一次创建个对象并赋值给对象里的变量。 然后到下面的方法里又调用了 好多次 感觉好麻烦呀 就是想 一下取到所有值。 
     public bool CreateNode(XmlNode Node) 
            { 
                UserInFo User = new UserInFo(); 
                foreach (XmlNode Read in Node) 
                { 
                    if (Read.Name == "User_ID") 
                    { 
                        User.U_ID = Read.InnerText; 
                    } 
                    if (Read.Name == "User_Name") 
                    { 
                        User.U_Name = Read.InnerText; 
                    } 
                    if (Read.Name == "Password") 
                    { 
                        User.U_Password = Read.InnerText; 
                    } 
                    if (Read.Name == "TokenPIN") 
                    { 
                        User.U_TokenPIN = Read.InnerText; 
                    } 
                    if (Read.Name == "FullName") 
                    { 
                        User.U_FullName = Read.InnerText; 
                    } 
                } 
                if (User.U_Name != null && User.U_Password != null && User.U_TokenPIN != null) 
                { 
                    User_Array.Add(User); 
                }             return true; 
            }             }
      

  4.   

    public class UserFileNurse
        {
            [XmlElement("User")]
            public User[] Users;
        }
        public class User
        {
            public string User_ID;
            public string User_Name;
            public string Password;
            public string TokenPIN;
            public string FullName;
        }XmlSerializer xs = new XmlSerializer(typeof(UserFileNurse));
    UserFileNurse uf = xs.Deserialize(File.OpenRead("test.xml")) as UserFileNurse;
      

  5.   

    public bool CreateNode(XmlNode Node) 
            { 
                
                foreach (XmlNode Read in Node) 
    你这个写法有问题,要么为CreateNode(xmlnodlist nodes),然后才能用Foreach
      

  6.   

    我这写法没问题呀 在CreateNode(xmlnodlist nodes)被调的时候还有一次foreach 循环呢
      

  7.   

    FilePath = "XML/PatientInfo.xml";
                PatientManager My_Node = new PatientManager();
                XmlDocument Xmldoc = new XmlDocument();
                Xmldoc.Load(FilePath);
                XmlNodeList Nodelist = Xmldoc.DocumentElement.ChildNodes;
                //XmlNodeList Nodelist = Xmldoc.SelectSingleNode("Group").ChildNodes;
                
                foreach (XmlNode XNode in Nodelist)
                {
                    My_Node.CreateNode(XNode);
                }
    调用了class PatientManager 的public bool CreateNode(XmlNode Node) 方法public bool CreateNode(XmlNode Node)
            {
                PatientInFo Patient = new PatientInFo();            foreach (XmlNode Read in Node)
                {
                    if (Read.Name == "ID")
                    {
                        Patient.ID = Read.InnerText;
                    }
                    if (Read.Name == "Last_Name")
                    {
                        Patient.Last_Name = Read.InnerText;
                    }
                          .
                          .
                          .
                          .
                }
    }
    我是这样调用去查找 并得到值的 哎~~~就想一下取出所有值
      

  8.   

    yuloukong  你刚才 说 楼上正解  我不知道你说的是谁的 是 反序列化的还是哪位的 我都晕了不知道哪个了。
      

  9.   

    FilePath = "XML/PatientInfo.xml"; 
                PatientManager My_Node = new PatientManager(); 
                XmlDocument Xmldoc = new XmlDocument(); 
                Xmldoc.Load(FilePath); 
                XmlNodeList Nodelist = Xmldoc.DocumentElement.ChildNodes; 
                //XmlNodeList Nodelist = Xmldoc.SelectNodes("//User");
                
                foreach (XmlNode XNode in Nodelist) 
                { 
                    My_Node.CreateNode(XNode);  
                }public bool CreateNode(XmlNode Node) 
            { 
                UserInFo User = new UserInFo(); 
                
                User.U_ID = XNode.ChildNodes[0].InnerText;  
           
                User.U_Name = XNode.ChildNodes[1].InnerText; 
       
                User.U_Password = XNode.ChildNodes[2].InnerText;            
        
                User.U_TokenPIN = XNode.ChildNodes[3].InnerText;                
       
                User.U_FullName = XNode.ChildNodes[4].InnerText; 
                  
                if (User.U_Name != null && User.U_Password != null && User.U_TokenPIN != null) 
                { 
                    User_Array.Add(User); 
                }             return true; 
            } 
     
      

  10.   

    FilePath = "XML/PatientInfo.xml"; 
                PatientManager My_Node = new PatientManager(); 
                XmlDocument Xmldoc = new XmlDocument(); 
                Xmldoc.Load(FilePath); 
     
                XmlNodeList Nodelist = Xmldoc.DocumentElement.SelectNodes("//User");
                
                foreach (XmlNode XNode in Nodelist) 
                { 
                    My_Node.CreateNode(XNode);  
                }
    //为什么不用xpath呢
    public bool CreateNode(XmlNode Node) 
            { 
                UserInFo User = new UserInFo(); 
                
                User.U_ID = XNode.ChildNodes[0].InnerText;  
           
                User.U_Name = XNode.ChildNodes[1].InnerText; 
       
                User.U_Password = XNode.ChildNodes[2].InnerText;            
        
                User.U_TokenPIN = XNode.ChildNodes[3].InnerText;                
       
                User.U_FullName = XNode.ChildNodes[4].InnerText; 
                  
                if (User.U_Name != null && User.U_Password != null && User.U_TokenPIN != null) 
                { 
                    User_Array.Add(User); 
                }             return true; 
            } 
     
      

  11.   

    都这么具体了,还让给例子
    UserFileNurse uf = xs.Deserialize(File.OpenRead("test.xml")) as UserFileNurse; 
    string s=uf.Users[0].User_ID;
    string s2=uf.Users[1].Name;
    ......
    会了吧?
      

  12.   

    会了  我用 恐惧之狼 的方法实现了 谢谢你们了 感谢 soaringbird  yuloukong