仅读取 xml 具有多个子节点的文件 returns 第一个节点

Reading xml file with multiple child nodes only returns first node

我有一个带有命名空间的 xml 文件,我可以读取它 properly.It 有一个外部节点,称为 'Items',它有多个子节点,其中有 50 个。(所以50 个子节点称为 'ReceiverPoints')。当我检查控制台时,它的大小是正确的,即 50 但是当我检查打印输出时,所有输出只是第一个 ReceiverPoint 节点的重复。

我想将每个接收点保存到 database.According 我见过的所有示例中,我的实现似乎 fine.But 它给了我错误 results.Could 有人帮我看看是什么我不见了?这是 xml file

public List<ReceiverPoint> ReadFile()
    {
        receiverList = new List<ReceiverPoint> ();

        Console.WriteLine ("Now in read file method :" + fileLocation);

            xmldoc = new XmlDocument ();
            xmldoc.Load (fileLocation);

        XmlNamespaceManager nameSpaceManager = new XmlNamespaceManager (xmldoc.NameTable);

        //nameSpaceManager.AddNamespace ("ns", "http://schemas.datacontract.org/2004/07/AristotleService.Models");
        nameSpaceManager.AddNamespace ("ns", "http://schemas.datacontract.org/2004/07/GTI.Aristotle.Web.Api.Models");



        XmlElement rootElement = xmldoc.DocumentElement;

        XmlNodeList nodeList = rootElement.SelectNodes("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint", nameSpaceManager);

        ReceiverPoint receiverPoint = new ReceiverPoint ();
foreach(XmlNode childNode in nodeList)
        {
            receiverPoint.CloseDate = childNode.SelectSingleNode ("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint/ns:CloseDate", nameSpaceManager).InnerText;
            receiverPoint.CreateDate = childNode.SelectSingleNode ("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint/ns:CreateDate", nameSpaceManager).InnerText;  
            receiverPoint.CreateWho = childNode.SelectSingleNode ("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint/ns:CreateWho", nameSpaceManager).InnerText;
            receiverPoint.Easting = childNode.SelectSingleNode ("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint/ns:Easting", nameSpaceManager).InnerText;
            receiverPoint.Elevation = childNode.SelectSingleNode ("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint/ns:Elevation", nameSpaceManager).InnerText;
            receiverPoint.IsDeployed = childNode.SelectSingleNode ("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint/ns:IsDeployed", nameSpaceManager).InnerText; 
            receiverPoint.IsManual = childNode.SelectSingleNode ("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint/ns:IsManual", nameSpaceManager).InnerText;
            receiverPoint.LastModifyDate = childNode.SelectSingleNode ("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint/ns:LastModifyDate", nameSpaceManager).InnerText;
            receiverPoint.Latitude = childNode.SelectSingleNode ("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint/ns:LatitudeWGS84", nameSpaceManager).InnerText;
            receiverPoint.Line = childNode.SelectSingleNode ("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint/ns:Line", nameSpaceManager).InnerText;
            receiverPoint.Longitude = childNode.SelectSingleNode ("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint/ns:LongitudeWGS84", nameSpaceManager).InnerText;
            receiverPoint.ReceiverType = childNode.SelectSingleNode ("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint/ns:ReceiverType", nameSpaceManager).InnerText;
            receiverPoint.Station = childNode.SelectSingleNode ("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint/ns:Station", nameSpaceManager).InnerText;




            //Get all the values stored in the receiver point object
            string station = receiverPoint.Station;
            string line = receiverPoint.Line;
            string elevation = receiverPoint.Elevation;
            string latitude = receiverPoint.Latitude;
            string longitude = receiverPoint.Longitude;
            string isDeployed = receiverPoint.IsDeployed;
            string easting = receiverPoint.Easting;
            string receiverType = receiverPoint.ReceiverType;
            string closeDate = receiverPoint.CloseDate;
            string createDate = receiverPoint.CreateDate;
            string createWho = receiverPoint.CreateWho;
            string lastModifyDate = receiverPoint.LastModifyDate;


            Console.WriteLine ("String lat : " + latitude);

            Console.WriteLine ("String lon : " + longitude);

            Console.WriteLine ("String create date : " + createDate);

            Console.WriteLine ("String create who : " + createWho);

            //Save the data to the db
            saveDataToDatabase (station,line,elevation,latitude,longitude,isDeployed,easting,receiverType,closeDate,createDate,createWho,lastModifyDate);


        }

        receiverList.Add (receiverPoint);
return receiverList;
    }

这段代码对我有用:

public List<ReceiverPoint> ReadFile()
        {
            var receiverList = new List<ReceiverPoint>();

            Console.WriteLine("Now in read file method :" + "");

            var xmldoc = new XmlDocument();
            xmldoc.Load(@"D:\users\..\Downloads\ReceiverPoints.xml");

            XmlNamespaceManager nameSpaceManager = new XmlNamespaceManager(xmldoc.NameTable);

            //nameSpaceManager.AddNamespace ("ns", "http://schemas.datacontract.org/2004/07/AristotleService.Models");
            nameSpaceManager.AddNamespace("ns", "http://schemas.datacontract.org/2004/07/GTI.Aristotle.Web.Api.Models");



            XmlElement rootElement = xmldoc.DocumentElement;

            XmlNodeList nodeList = rootElement.SelectNodes("/ns:PagedDataInquiryResponseOfReceiverPointQ3ffICf5/ns:Items/ns:ReceiverPoint", nameSpaceManager);


            foreach (XmlNode childNode in nodeList)
            {
                ReceiverPoint receiverPoint = new ReceiverPoint();
                receiverPoint.CloseDate = childNode.SelectSingleNode("ns:CloseDate", nameSpaceManager).InnerText;
                receiverPoint.CreateDate = childNode.SelectSingleNode("ns:CreateDate", nameSpaceManager).InnerText;
                receiverPoint.CreateWho = childNode.SelectSingleNode("ns:CreateWho", nameSpaceManager).InnerText;
                receiverPoint.Easting = childNode.SelectSingleNode("ns:Easting", nameSpaceManager).InnerText;
                receiverPoint.Elevation = childNode.SelectSingleNode("ns:Elevation", nameSpaceManager).InnerText;
                receiverPoint.IsDeployed = childNode.SelectSingleNode("ns:IsDeployed", nameSpaceManager).InnerText;
                receiverPoint.IsManual = childNode.SelectSingleNode("ns:IsManual", nameSpaceManager).InnerText;
                receiverPoint.LastModifyDate = childNode.SelectSingleNode("ns:LastModifyDate", nameSpaceManager).InnerText;
                receiverPoint.Latitude = childNode.SelectSingleNode("ns:LatitudeWGS84", nameSpaceManager).InnerText;
                receiverPoint.Line = childNode.SelectSingleNode("ns:Line", nameSpaceManager).InnerText;
                receiverPoint.Longitude = childNode.SelectSingleNode("ns:LongitudeWGS84", nameSpaceManager).InnerText;
                receiverPoint.ReceiverType = childNode.SelectSingleNode("ns:ReceiverType", nameSpaceManager).InnerText;
                receiverPoint.Station = childNode.SelectSingleNode("ns:Station", nameSpaceManager).InnerText;




                //Get all the values stored in the receiver point object
                string station = receiverPoint.Station;
                string line = receiverPoint.Line;
                string elevation = receiverPoint.Elevation;
                string latitude = receiverPoint.Latitude;
                string longitude = receiverPoint.Longitude;
                string isDeployed = receiverPoint.IsDeployed;
                string easting = receiverPoint.Easting;
                string receiverType = receiverPoint.ReceiverType;
                string closeDate = receiverPoint.CloseDate;
                string createDate = receiverPoint.CreateDate;
                string createWho = receiverPoint.CreateWho;
                string lastModifyDate = receiverPoint.LastModifyDate;


                Console.WriteLine("String lat : " + latitude);

                Console.WriteLine("String lon : " + longitude);

                Console.WriteLine("String create date : " + createDate);

                Console.WriteLine("String create who : " + createWho);

                //Save the data to the db
                //saveDataToDatabase(station, line, elevation, latitude, longitude, isDeployed, easting, receiverType, closeDate, createDate, createWho, lastModifyDate);

                receiverList.Add(receiverPoint);
            }


            return receiverList;
        }

将 receiverList.Add(receiverPoint) 移动到 foreach 循环中。