2012-02-28 85 views
1

我是很新,使用LINQ所以我不能完全確定所有正確的語法等XML Linq查詢不工作

的下面是我到目前爲止

我的XML

<?xml version="1.0"?> 
<Bookings> 
    <Booking BookingNumber="300067649"> 
     <FLIGHTS> 
      <FlightGroups> 
       <FlightGroup ID="1 "> 
        <Flights> 
         <Flight ID="1"> 
          <ADULTS>1</ADULTS> 
          <DEPARTURE_DATE>18/02/2006</DEPARTURE_DATE> 
         </Flight> 
        </Flights> 
       </FlightGroup> 
      </FlightGroups> 
     </FLIGHTS> 
    </Booking> 
</Bookings> 

我得到這個由一家外部公司控制的網絡服務,所以我無法改變語法

這裏的LINQ我用了我的.Net代碼

Dim root As XElement = XElement.Load(New StringReader(xmlstring)) 
Dim tests As IEnumerable(Of XElement) = From el In 
    root.Elements("Booking").Elements("FLIGHTS").Descendants() 
    Where CType(el.Element("DEPARTURE_DATE"), DateTime).Date <= DateTime.Now.Date 

For Each el As XElement In tests 
    Response.Write(el) 
Next 

字符串xmlstring是上面的XML。

的問題是,這是給我的錯誤是:

Value cannot be null. 
Parameter name: element 

基本上我想選擇是今天的日期之前的所有航班,只是似乎無法得到這個工作。

任何幫助,將不勝感激

+2

僅供參考,您可以在加載String時使用XElement.Parse()而不是Load。 – DaveShaw 2012-02-28 14:11:56

回答

1

根據當前的文化,18/02/2006可能不是一個DateTime(有一天,在一個月前的敞篷車。如果你在美國的時候,一個月應前一天來)。

這會引發錯誤(我在美國)。

var d1 = DateTime.Parse("18/02/2006"); 

這工作:

var d2 = DateTime.Parse("02/18/2006"); 

我只是想測試之下,一切都按預期(我改變了日期的格式)。您可能必須提供格式提供程序來轉換日期。

var str = @"<?xml version=""1.0""?> 
<Bookings> 
    <Booking BookingNumber=""300067649""> 
     <FLIGHTS> 
      <FlightGroups> 
       <FlightGroup ID=""1""> 
        <Flights> 
         <Flight ID=""1""> 
          <ADULTS>1</ADULTS> 
          <DEPARTURE_DATE>02/18/2006</DEPARTURE_DATE> 
         </Flight> 
        </Flights> 
       </FlightGroup> 
      </FlightGroups> 
     </FLIGHTS> 
    </Booking> 
</Bookings> 
"; 
var xel = System.Xml.Linq.XElement.Parse(str); 

var flights = xel.Descendants("Flight"); 
var tests = flights.Where(f => DateTime.Parse(f.Element("DEPARTURE_DATE").Value).Date < DateTime.Now.Date); 
foreach (var test in tests) 
{ 
    System.Console.WriteLine(test.Element("DEPARTURE_DATE").Value); 
} 
+0

謝謝 - 我已經得到了這個工作 - 我將您的工作代碼轉換爲VB,並且語句的WHERE部分中的語法不同 – 2012-02-28 15:00:23