2013-07-11 82 views
1

我想從XML文檔中獲取列表。我需要從兩個不同的部分創建兩個列表,然後匹配文檔中的Id值。 這裏是我的XML文件從XML中獲取重複的Id值

<?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

多一點挖掘導致我的解決方案。

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")); 
      }