我正在尝试从XML文档中获取列表。我需要从两个不同的部分创建两个列表,然后匹配文档中的Id值。 这是我的XML文件
<?xml version="1.0" encoding="utf-8"?>
<Root>
<VehicleCollection>
<ModelInfo>
<Vehicle>
<Id>101</Id>
<Color>Red</Color>
<Year>1987</Year>
<Make>Saturn</Make>
<Manufacturer>General Motors</Manufacturer>
</Vehicle>
<Vehicle>
<Id>100</Id>
<Color>Blue</Color>
<Year>1998</Year>
<Make>Saturn</Make>
<Manufacturer>General Motors</Manufacturer>
</Vehicle>
</ModelInfo>
<PriceInfo>
<Vehicle>
<Id>101</Id>
<OriginalCost>11000</OriginalCost>
<MarketValue>1200</MarketValue>
</Vehicle>
<Vehicle>
<Id>100</Id>
<OriginalCost>11000</OriginalCost>
<MarketValue>3100</MarketValue>
</Vehicle>
</PriceInfo>
</VehicleCollection>
</Root>
我想确定PriceInfo部分中的项目数与ModelInfo部分中的项目数相匹配。我正在使用下面的代码来获取列表。
private static void PrintVehicleInfo(string fileName)
{
if (fileName != null)
{
var xDoc = XDocument.Load(fileName);
var vehicle = xDoc.Descendants("Vehicle").ToList(); //Culprit
foreach (var v in vehicle)
{
Console.WriteLine(v.Element("Id"));
}
}
}
如何从XMl文档创建两个单独的列表?我得到一个重复ID值的列表。如果我尝试在代码中包含节名称,则会抛出运行时异常。
var vehicle = xDoc.Descendants("ModelInfo/Vehicle").ToList();
OR
var vehicle = xDoc.Descendants("ModelInfo//Vehicle").ToList();
答案 0 :(得分:0)
多一点挖掘让我找到了解决方案。
var xDoc = XDocument.Load(fileName);
XElement vehicleCollection = xDoc.Element("Root").Element("VehicleCollection").Element("ModelInfo");
var vehicle = vehicleCollection.Descendants("Vehicle").ToList();
foreach (var v in vehicle)
{
Console.WriteLine(v.Element("Id"));
}
vehicleCollection = xDoc.Element("Root").Element("VehicleCollection").Element("PriceInfo");
vehicle = vehicleCollection.Descendants("Vehicle").ToList();
foreach (var v in vehicle)
{
Console.WriteLine(v.Element("Id"));
}