2010-12-15 3 views
0

XDocument에 다소 문제가있어 메신저에서 반환 된 XML을 구문 분석하는 XDocument를 만듭니다. 난에서 말을 할 수있는 자손을 호출 할 때 여기, 지금은 XMLXDocument는 선택한 객체가 있지만 Descendants를 얻지 못합니다.

<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

여기에 몇 가지 문제가 있습니다.

먼저, select 절에 Element를 의미 할 때 Attribute를 두는 것처럼 보입니다. 둘째, 해당 요소를 가져올 때 네임 스페이스를 포함해야합니다. 셋째, DateTime으로 변환 할 수 없으므로 구문 분석해야합니다. (EDIT : 캐스트 할 Element의 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

하나의 오류 일 수는 있지만 여전히 실패합니다. 예외는 발생하지 않지만 DataGrid 네티어를 채우지는 않습니다. – 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

관련 문제