[英]Reading xml file with multiple child nodes only returns first node
我有一個帶名稱空間的xml文件,我可以正確讀取它。它有一個名為'Items'的外部節點,其中有多個子節點,其中有50個子節點(因此50個子節點稱為'ReceiverPoints')。當我檢查控制台,它的大小是正確的,即50,但是當我檢查打印輸出時,所有輸出都是第一個ReceiverPoint節點的重復。
我想將每個接收器點保存到數據庫中。根據我所看到的所有示例,我的實現看起來不錯。但是它給了我錯誤的結果。有人可以幫我看看我所缺少的是什么嗎?這是xml文件
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;
}
在foreach循環內移動receiverList.Add(receiverPoint)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.