2010-12-15 70 views
0

即時通訊與XDocument有點兒麻煩創建XDocument解析從web服務返回的xml。 這裏是XMLXDocument不會得到後代,雖然選擇了一個存在

<VentaOnlineList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"> 
    <VentasList> 
    <VentaOnlineInfo> 
     <ProcessDate>2010-11-01T00:00:00</ProcessDate> 
     <TicketDate>2010-11-01T00:00:00</TicketDate> 
     <DeliveryDate>2010-09-29T00:00:00</DeliveryDate> 
     <DwhLastMonthProcessData>0</DwhLastMonthProcessData> 
     <DwhLastMonthTicketDate>0</DwhLastMonthTicketDate> 
     <PsucLastMonthDeliveryDate>0</PsucLastMonthDeliveryDate> 
     <DwhSelectedMonthProcessData>-6.54</DwhSelectedMonthProcessData> 
     <DwhSelectedMonthTicketDate>-6.54</DwhSelectedMonthTicketDate> 
     <PsucSelectedMonthDeliveryDate>-6.54</PsucSelectedMonthDeliveryDate> 
     <DwhNextMonthProcessData>0</DwhNextMonthProcessData> 
     <DwhNextMonthTicketDate>0</DwhNextMonthTicketDate> 
     <PsucNextMonthDeliveryDate>0</PsucNextMonthDeliveryDate> 
    </VentaOnlineInfo> 
    </VentasList> 
    <Error> 
    <ErrorFlag>false</ErrorFlag> 
    </Error> 
</VentaOnlineList> 

現在,當我嘗試打電話讓後人從說「VentaOnlineInfo」它說,它是空的。

這裏是代碼

XDocument xmlSell = XDocument.Parse(xmlContent); 
     XNamespace nameSpace = "http://tempuri.org/"; 

     var venta = from ventas in xmlSell.Descendants(nameSpace + "VentaOnlineInfo") 
        select new VentaDigital 
        { 
         ProcessDate = (DateTime)ventas.Attribute("ProcessDate"), 
         TicketDate = (DateTime)ventas.Attribute("TicketDate"), 
         DeliveryDate = (DateTime)ventas.Attribute("DeliveryDate") 
        }; 

     ventasDigitales.ItemsSource = venta; 

xmlContent其充滿包含XML的字符串。

有人知道爲什麼它一直說後裔不存在? 任何幫助將被折扣

回答

2

您在這裏有幾個問題。

首先,它看起來像你把屬性,當你的意思是選擇子句中的元素。其次,在獲取這些元素時,您需要包含名稱空間。 第三,你不能強制轉換爲DateTime,你必須解析它。 (編輯:只要你沒有明確引用元素的價值屬性,它會投)

這是您發佈的代碼與這些問題修復。這似乎爲我工作:

XDocument xmlSell = XDocument.Parse(x); 
    XNamespace nameSpace = "http://tempuri.org/"; 

    var venta = from ventas in xmlSell.Descendants(nameSpace + "VentaOnlineInfo") 
       select new VentaDigital 
       { 
        ProcessDate = (DateTime)ventas.Element(nameSpace + "ProcessDate"), 
        TicketDate = (DateTime)ventas.Element(nameSpace + "TicketDate"), 
        DeliveryDate = (DateTime)ventas.Element(nameSpace + "DeliveryDate") 
       }; 

     ventasDigitales.ItemsSource = venta; 
+0

它可能是一個錯誤,但它仍然失敗。它不會引發異常,但它不會填充數據網格nethier。 – ShinyDarkStone 2010-12-15 19:08:52

+0

我發現了一些問題,請參閱我編輯的答案。我在LinqPAD上試了一下,它和這些改變一起工作。 – 2010-12-15 19:10:06

+0

您*可*轉換爲DateTime。有一個明確的轉換。 – 2010-12-15 19:13:43

0

你需要將它們取子值作爲元素包括命名空間。下面是其工作的一個簡短但完整的例子:如果你這樣做,你就仍然沒有得到任何

using System; 
using System.Linq; 
using System.Xml.Linq; 

class Test 
{ 
    static void Main()   
    { 
     string xml = @"<VentaOnlineList 
          xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
          xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
          xmlns='http://tempuri.org/'> 
    <VentasList> 
    <VentaOnlineInfo> 
     <ProcessDate>2010-11-01T00:00:00</ProcessDate> 
     <TicketDate>2010-11-01T00:00:00</TicketDate> 
     <DeliveryDate>2010-09-29T00:00:00</DeliveryDate> 
     <DwhLastMonthProcessData>0</DwhLastMonthProcessData> 
     <DwhLastMonthTicketDate>0</DwhLastMonthTicketDate> 
     <PsucLastMonthDeliveryDate>0</PsucLastMonthDeliveryDate> 
     <DwhSelectedMonthProcessData>-6.54</DwhSelectedMonthProcessData> 
     <DwhSelectedMonthTicketDate>-6.54</DwhSelectedMonthTicketDate> 
     <PsucSelectedMonthDeliveryDate>-6.54</PsucSelectedMonthDeliveryDate> 
     <DwhNextMonthProcessData>0</DwhNextMonthProcessData> 
     <DwhNextMonthTicketDate>0</DwhNextMonthTicketDate> 
     <PsucNextMonthDeliveryDate>0</PsucNextMonthDeliveryDate> 
    </VentaOnlineInfo> 
    </VentasList> 
    <Error> 
    <ErrorFlag>false</ErrorFlag> 
    </Error> 
</VentaOnlineList>"; 

     XDocument xmlSell = XDocument.Parse(xml); 
     XNamespace nameSpace = "http://tempuri.org/"; 

     var venta = from ventas in xmlSell.Descendants(nameSpace + "VentaOnlineInfo") 
        select new 
        { 
         ProcessDate = (DateTime)ventas.Element(nameSpace + "ProcessDate"), 
         TicketDate = (DateTime)ventas.Element(nameSpace + "TicketDate"), 
         DeliveryDate = (DateTime)ventas.Element(nameSpace + "DeliveryDate") 
        }; 

     foreach (var x in venta) 
     { 
      Console.WriteLine(x); 
     } 
    } 
} 

現在,這將表明一個奇怪的現象在你的綁定正在發生的事情。

+0

Tnx現在它的工作原理,我不能投票,但這也是有用的 – ShinyDarkStone 2010-12-15 19:40:07

相關問題