2010-12-15 12 views
0

XDocumentに問題があり、WebServiceから返されたxmlを解析するXDocumentを作成します。私は子孫を呼び出すしようとすると、ここで は、その空のことを言い、「VentaOnlineInfo」から言うことができます、XML今XDocumentは、選択したものの子孫を取得しません。

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

あなたはここにいくつかの問題があります。

まず、Elementを意味するときに、属性を置くように見えます。次に、それらの要素を取得するときに名前空間を含める必要があります。 第3に、あなたはそれを解析する必要があるDateTimeにキャストできません。 (編集:要素のValueプロパティを明示的に参照しない限り、キャストします)

ここでは、これらの問題を修正して投稿したコードを示します。私のために動作するように表示されます。

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

これは1つのエラーですが、それでも失敗します。それは例外をスローしませんが、それはdatagrid nethierを埋めることはありません。 – ShinyDarkStone

+0

私はいくつかの問題を発見しました。私の編集した答えを見てください。私はLinqPADで試してみました。 –

+0

あなたはDateTimeにキャストできます。明示的な変換があります。 –

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

関連する問題