2014-02-13 2 views
0

여기에서 나는이 XML에 관한 질문을 다시 파싱합니다. 엘리먼트 TimeSpan을 얻으려고 애쓰며 애트리뷰트입니다. 이것은 내가'Lodgx.Classes.Models.Timespan'유형의 표현식을 쿼리 할 수 ​​없습니다.

Dim time As Timespan = From el In _xDoc.Elements(_ns + "TimesSpan").Select(Function(e) New Timespan With { _ 
                   .Duration = e.Attribute("Duration"), _ 
                   .StartDate = e.Attribute("Start"), _ 
                   .EndDate = e.Attribute("End")}).FirstOrDefault() 

을 사용하고 코드입니다하지만 그 오류를 나에게 쿼리 할되지 않은 유형 'Lodgx.Classes.Models.Timespan'의

표현을 제공합니다. LINQ 공급자에 대한 어셈블리 참조 및/또는 네임 스페이스 가져 오기가 누락되지 않았는지 확인하십시오. 나는 그것이 내가 메시지>순서는 라인 반환 에 어떤 요소를 포함하지 얻을 실행하면 이제

Dim time = From el As XElement In _xDoc.Elements(_ns + "TimeSpan") 
         Select New Timespan With { _ 
          .Duration = el.Attribute("Duration").Value, _ 
          .StartDate = el.Attribute("Start").Value, _ 
          .EndDate = el.Attribute("End").Value} 

Return time.First() 

:

편집

나는 같이 내 코드를 변경 time.First()

EDIT # 2

_xDoc 내가 STR의 가치를 확인했습니다

Dim _xDoc = XDocument.Load(str) 

웹 서비스 호출에서 XML 문자열을로드하는하여 XDocument이며 내가

을 기대하고있어 무엇 @ MarcinJuraszek : 여기에 XML의 작은 샘플이 있습니다. (대용량 파일이므로 ElementTimeSpan을 포함하고 있습니다. 속성 값을 가져 오려고합니다.)

<?xml version="1.0" encoding="utf-16"?> 
<HotelPropertyDescriptionRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" TimeStamp="2013-12-30T18:49:36" Version="1.14.1"> 
    <Success xmlns="http://webservices.sabre.com/sabreXML/2003/07" /> 
<RoomStay xmlns="http://webservices.sabre.com/sabreXML/2003/07"> 
    <Guarantee> 
     <DepositsAccepted> 
     <PaymentCard CardType="AMERICAN EXPRESS" CardCode="AX" /> 
     <PaymentCard CardType="MASTERCARD" CardCode="CA" /> 
     <PaymentCard CardType="DINERS CLUB CARD" CardCode="DC" /> 
     <PaymentCard CardType="DISCOVER CARD" CardCode="DS" /> 
     <PaymentCard CardType="MASTER CARD" CardCode="IK" /> 
     <PaymentCard CardType="JCB CREDIT CARD" CardCode="JC" /> 
     <PaymentCard CardType="VISA" CardCode="VI" /> 
     </DepositsAccepted> 
     <GuaranteesAccepted> 
     <PaymentCard CardType="AMERICAN EXPRESS" CardCode="AX" /> 
     <PaymentCard CardType="MASTERCARD" CardCode="CA" /> 
     <PaymentCard CardType="DINERS CLUB CARD" CardCode="DC" /> 
     <PaymentCard CardType="DISCOVER CARD" CardCode="DS" /> 
     <PaymentCard CardType="MASTER CARD" CardCode="IK" /> 
     <PaymentCard CardType="JCB CREDIT CARD" CardCode="JC" /> 
     <PaymentCard CardType="VISA" CardCode="VI" /> 
     <Text>/GC-    COMPANY NAME AND ADDRESS</Text> 
     <Text>/GAGT    GUARANTEE TO AGENCY TIDS/IATA NUMBER</Text> 
     <Text>/GDPST   DEPOSIT WILL BE SENT</Text> 
     <Text>/GDPST...   IMMEDIATE DEPOSIT TYPE OR FORM</Text> 
     </GuaranteesAccepted> 
    </Guarantee> 
    <TimeSpan Duration="0005" Start="01-14" End="01-15" /> 
</RoomStay> 
    </HotelPropertyDescriptionRS> 
+0

_xDoc''의 새로운 기능 :

또한, 네임 스페이스 선언을 포함 잊으 셨나요? 샘플을 제공해주십시오. – Neolisk

+0

@Neolisk 내 편집을 확인하십시오. – PsychoCoder

+1

OK, XML을 구문 분석해야합니다. – MarcinJuraszek

답변

1

타임 스팬 요소가 루트의 직계 후손이 아니기 때문에, 당신은 (당신이 XPath를을 사용할 수 있습니다) 대신 _xDoc.Elements_xDoc.Descendants를 사용하거나 전체 경로를 지정해야합니다.

부수적으로 클래스 명명에주의해야합니다. 이미 .NET에 TimeSpan이라는 클래스가 있으며 이러한 속성이 없습니다.

Dim _ns As XNamespace = 
    XNamespace.Get("http://webservices.sabre.com/sabreXML/2003/07") 
+1

감사합니다 @Neolisk 문제를 해결했습니다. 나를 통해 걷고 나를 해결책으로 건네주는 대신에 배우게 해준 것에 대해 (이 질문과 제 2의 다른 질문에서) 시간을내어 주셔서 감사합니다. – PsychoCoder

+0

@PsychoCoder : 기꺼이 도와 드리겠습니다! 당신은 그들을 upvoting하여 답변을 추가 수상 수 있습니다. 나는 upvotes없이 귀하의 질문에 대한 많은 답변을보고 있습니다. 지금까지 충분한 평판을 얻었으므로, 특히 유용하다고 생각되는 것 전부 또는 일부를 upvoting하십시오. 고맙습니다. – Neolisk

관련 문제