我的想法很简单:我有这个XML:
<Balance>
<LocationName>Location 1</LocationName>
<Longitude>39.74</Longitude>
<Latitude>-104.99</Latitude>
<RTI>
<Container>12</Container>
<Pallet>54</Pallet>
</RTI>
</Balance>
<Balance>
<LocationName>Location 2</LocationName>
<Longitude>39.73</Longitude>
<Latitude>-104.8</Latitude>
<RTI>
<Container>21</Container>
<Pallet>45</Pallet>
</RTI>
</Balance>
在ASP.NET项目中,我有一个控制器函数,它将一个名为 id 的String作为参数(例如,&#34;位置1和#34;)。我需要在这个XML文件中找到一个节点,其中location元素与给定的id具有相同的值,并将其数据复制到调用它的对象。最简单的方法是什么?我在这里有一些代码可视化我的意思:
控制器:
public PartialViewResult BalanceBarChart(String id)
{
Balance balanceParam = new Balance(id);
return PartialView(balanceParam);
}
上课:
public class Balance
{
public String LocationName { get; set; }
public int pallets { get; set; }
public int containers { get; set; }
public double Longitude { get; set; }
public double Latitude { get; set; }
public Balance(String id)
{
loadXMLData(id);
}
private void loadXMLData(String id)
{
XElement doc = XElement.Load("~/App_Data/saldotracking.xml");
var queryResult =
from result in doc.Elements("Balance")
where (String)doc.Attribute("LocationName") == id
select result;
// copy results to class attributes
}
}
观点:
@model TodayIT.TrackOnline.Maps.Models.Balance
@model.LocationName
@model.Longitude
//etc
关于Linq查询的结果,Linq上的Microsoft教程并不是很清楚。如果我做得对,变量 queryResult 应该只包含一个包含我想要的元素的Balance节点。如何将这些值复制到类属性?
答案 0 :(得分:0)
可能最简单的方法是直接选择新对象,然后将它们复制到您正在使用的当前对象。这样,当您将模型传递给视图时,就会有数据供视图使用。
private void loadXMLData(String id)
{
XElement doc = XElement.Load("~/App_Data/saldotracking.xml");
var queryResult =
from result in doc.Elements("Balance")
where (String)doc.Attribute("LocationName") == id
select new Balance
{
LocationName = LocationName,
Longitude = Longitude
};
// copy results to class attributes
foreach(var balance in Balance)
{
this.LocationName = balance.LocationName;
this.Longitude = balance.Longitude;
}
}