2013-03-12 2 views
0

나는 odata 피드를 사용하여 eBay에서 정보를 가져오고 있습니다. linq을 사용하여 특정 정보를 가져 오려고합니다. linq을 사용하여 우리가 원하는 정보를 담고있는 특정 요소로 내려갈 수 있습니다. 내가 할 수없는 것은 내가 원하는 특정 자식 요소를 얻기 위해 요소 데이터를 쿼리하는 방법을 찾는 것이다. 나는 단지 그것을 파싱 할 수 있었지만 실제로 linq를 배우고 싶다. 나는 언어로서 vb.net를 사용하고있다. 나는 우리가 필요로하는 특정 하위 요소를 얻기 위해 위의 쿼리를 고민하고질문 이베이 odata with linq

<m:properties xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"> 
    <d:Id>160917851201</d:Id> 
    <d:UserId>baltisales</d:UserId> 
    <d:Title>Allen Bradley 1756-L65 /B ControlLogix Processor 32MB Memory *60 DAYS WARRANTY!*</d:Title> 
    <d:Subtitle m:null="true"></d:Subtitle> 
    <d:SellingState>Active</d:SellingState> 
    <d:TimeLeft>P24DT2H25M33S</d:TimeLeft> 
    <d:Currency>USD</d:Currency> 
    <d:CurrentPrice m:type="Edm.Double">6446.14</d:CurrentPrice> 
    <d:MinimumToBid m:type="Edm.Double">6446.14</d:MinimumToBid> 
    <d:BidCount m:type="Edm.Int32">0</d:BidCount> 
    <d:Description m:null="true"></d:Description> 
    <d:QuantitySold m:type="Edm.Int32">0</d:QuantitySold> 
    <d:AutoPay m:type="Edm.Boolean">false</d:AutoPay> 
    <d:CharityId m:null="true"></d:CharityId> 
    <d:Country>US</d:Country> 
    <d:Compatibility m:null="true"></d:Compatibility> 
    <d:GalleryUrl>http://thumbs2.ebaystatic.com/m/m3Y01PfuyFhctnJiEet95Gw/140.jpg</d:GalleryUrl> 
    <d:GlobalId>EBAY-US</d:GlobalId> 
    <d:PostalCode>21209</d:PostalCode> 
    <d:ReturnsAccepted m:type="Edm.Boolean">true</d:ReturnsAccepted> 
    <d:PrimaryCategoryId>97184</d:PrimaryCategoryId> 
    <d:SecondaryCategoryId m:null="true"></d:SecondaryCategoryId> 
    <d:ViewItemUrl>http://www.ebay.com/itm/Allen-Bradley-1756-L65-B-ControlLogix-Processor-32MB-Memory-60-DAYS-WARRANTY-/160917851201?pt=BI_Control_Systems_PLCs</d:ViewItemUrl> 
    <d:PaymentMethods>PayPal ,VisaMC ,AmEx</d:PaymentMethods> 
    <d:Condition m:type="eBay.Model.Entities.Condition"> 
    <d:Id m:type="Edm.Int32">3000</d:Id> 
    <d:Name>Used</d:Name> 
    </d:Condition> 
    <d:ListingInfo m:type="eBay.Model.Entities.ListingInfo"> 
    <d:BestOfferEnabled m:type="Edm.Boolean">true</d:BestOfferEnabled> 
    <d:BuyItNowAvailable m:type="Edm.Boolean">false</d:BuyItNowAvailable> 
    <d:BuyItNowPrice m:type="Edm.Double" m:null="true"></d:BuyItNowPrice> 
    <d:ConvertedBuyItNowPrice m:type="Edm.Double" m:null="true"> </d:ConvertedBuyItNowPrice> 
    <d:Gift m:type="Edm.Boolean">false</d:Gift> 
    <d:ListingType>StoreInventory</d:ListingType> 
    <d:StartTime m:type="Edm.DateTime">2012-11-06T23:08:18Z</d:StartTime> 
    <d:EndTime m:type="Edm.DateTime">2013-04-05T23:13:18Z</d:EndTime> 
    </d:ListingInfo> 
    <d:Distance m:type="eBay.Model.Entities.Distance" m:null="true"></d:Distance> 
    <d:ShippingInformation m:type="eBay.Model.Entities.ShippingInformation"> 
    <d:Delimiter m:null="true"></d:Delimiter> 
    <d:ExpeditedShipping m:type="Edm.Boolean">true</d:ExpeditedShipping> 
    <d:HandlingTime m:type="Edm.Int32">1</d:HandlingTime> 
    <d:OneDayShippingAvailable m:type="Edm.Boolean">true</d:OneDayShippingAvailable> 
    <d:ShippingServiceCost m:type="Edm.Double">0</d:ShippingServiceCost> 
    <d:ShippingType>FlatDomesticCalculatedInternational</d:ShippingType> 
    </d:ShippingInformation> 
</m:properties> 

: 나는 다음과 같은 사용 후 내가 요소를 얻으려면 :처럼이 반환하는 요소의

Sub Main 
dim ns = "http://ebayodata.cloudapp.net/" 
dim url as string = "http://ebayodata.cloudapp.net/Items?search=1756-L65" 
    Using reader As XmlReader = XmlReader.Create(url) 
    While reader.Read() 
     If reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "entry" Then 
      GetChildContentElements(reader) 
     End If 

    End While 
End Using 
End Sub 


    Private Sub GetChildContentElements(reader As XmlReader) 
' move to first child 
While reader.Read() 
    If reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "m:properties" Then 
     Exit While 
    End If 
End While 
Dim bookXml As XElement = DirectCast(XNode.ReadFrom(reader), XElement) 
Console.WriteLine(bookXml) 

    End Sub 

한 것은 보이는 함께 일해. 태그의 ":"는 네임 스페이스를 사용하여 혼란스러워합니다. 내가 뭘하고 싶은 건 d : Id, d : UserId, d : Currentprice 등의 값을 얻기 위해 엘리먼트를 쿼리 할 수있게하는 것이다. 어떤 제안이라도 환영받을 것이다.

답변

0

샘플 코드,

const string baseAddress = "http://ebayodata.cloudapp.net/"; 
EBayData ebay = new EBayData(new Uri(baseAddress)); 

var items = ebay.Execute<Item>(new Uri(baseAddress + "Items?search=1756-L65")); 
foreach (var item in items) 
{ 
    Console.WriteLine(item.Title); 
} 
+0

RaghuRam 감사합니다. 그거 좋네. 이것은 내가하려는 일을 크게 단순화시키고 Linq의 구문을 조금 더 잘 이해할 수있게 도와줍니다. – DougM

1

WCF 데이터 서비스 클라이언트를 사용해보십시오. 사물을 단순화 할 프록시 클래스를 생성 할 수 있습니다. 설명서 here을 참조하십시오. 생성 된 WCF DS 클라이언트를 지정하는 URL의 작업을 수행하는

+0

는 제안을 주셔서 감사합니다. 방금이 서비스로 WCF를 사용하여 실험했지만 성공하지 못했습니다. 아마도이 주제에 대한 지식이 부족하기 때문일 것입니다. 내 실험에서 eBay 서비스는 URI에 검색어가 필요하다는 점에서 일반적인 oData 형식을 따르지 않는 것 같습니다 (예 : http://ebayodata.cloudapp.net/Items?search=1756-L65). WCF는이 형식을 받아들이지 않습니다. 프로젝트에서 서비스 참조를 설정하고 메소드를 볼 수는 있지만 결과를 얻지는 못했습니다. – DougM