2017-10-22 1 views
0

항목 컬렉션에서 itemId, galleryURL, title, viewItemURL 값에 성공적으로 액세스했습니다. 그러나 문제는 다른 자식 내부의 항목 컬렉션 바로 아래에없는 다른 값에 액세스해야하는 것입니다. 더 나은 아이디어를 얻으려면 XML picture of XML 사진을보십시오. 내가 listingInfo-> watchCountgrab xml 자식 요소의 자식

public ActionResult Search(string OperationName, string calltype, string page, string keywords, string type, string location, string condition, string min, string max, string negative, string minFeedback, string maxFeedback, string drange, string categoryId) 
{ 
    string AppId = "demo-key"; //api configs 
    string BaseUrl = "http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME="; //base url api end point 

    if (calltype == "categoryClick") 
    { 
     string Url = BaseUrl + OperationName + "&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=" + AppId + "&RESPONSE-DATA-FORMAT=XML&REST-PAYLOAD&categoryId=" + categoryId + "&paginationInput.entriesPerPage=2&paginationInput.pageNumber=" + page + ""; 

     var items = new List<EbayDataViewModel>(); 

     XDocument xdoc = XDocument.Load(Url); 

     // Since i am only interested in <item> collections within <searchResult> 
     var searchResultItems = xdoc.Descendants() 
      .Where(x => x.Name.LocalName == "item"); 

     foreach (var sri in searchResultItems) 
     { 
      // Get all child xml elements 
      var childElements = sri.Elements(); 

      var itemId = childElements.FirstOrDefault(x => x.Name.LocalName == "itemId"); 
      var imageurl = childElements.FirstOrDefault(x => x.Name.LocalName == "galleryURL"); 
      var title = childElements.FirstOrDefault(x => x.Name.LocalName == "title"); 
      var url = childElements.FirstOrDefault(x => x.Name.LocalName == "viewItemURL"); 
      // var numberofwatch = childElements.Where(x => x.Name.LocalName == "listinginfo"); this is one step inside of another element 

      //add items from xml data to EbayDataViewModel object 
      items.Add(new EbayDataViewModel 
      { 
       ItemId = itemId == null ? String.Empty : itemId.Value, 
       EbayImageUrl = imageurl == null ? String.Empty : imageurl.Value, 
       EbayTitle = title == null ? String.Empty : title.Value, 
       EbayUrl = url == null ? String.Empty : url.Value, 
       //NumberOfWatch = numberofwatch == null ? String.Empty : numberofwatch.Value, 
      }); 
     } 
     var e = Json(items); 
     return Json(items); 

    }else{ 

    } 

    return null; 
} 

답변

0

코드 행은 내가 생각하는 문제를 해결

var에 nofwatch = childElements.FirstOrDefault (x => x.Name.LocalName == "listingInfo") 요소() FirstOrDefault (x => x.Name.LocalName == "watchCount");

foreach (var sri in searchResultItems) 
       { 
        // Get all child xml elements 
        var childElements = sri.Elements(); 

        var itemId = childElements.FirstOrDefault(x => x.Name.LocalName == "itemId"); 
        var imageurl = childElements.FirstOrDefault(x => x.Name.LocalName == "galleryURL"); 
        var title = childElements.FirstOrDefault(x => x.Name.LocalName == "title"); 
        var url = childElements.FirstOrDefault(x => x.Name.LocalName == "viewItemURL"); 
        var nofwatch = childElements.FirstOrDefault(x => x.Name.LocalName == "listingInfo").Elements().FirstOrDefault(x => x.Name.LocalName == "watchCount"); 

        //add items from xml data to EbayDataViewModel object 
        items.Add(new EbayDataViewModel 
        { 
         ItemId = itemId == null ? String.Empty : itemId.Value, 
         EbayImageUrl = imageurl == null ? String.Empty : imageurl.Value, 
         EbayTitle = title == null ? String.Empty : title.Value, 
         EbayUrl = url == null ? String.Empty : url.Value, 
         NumberOfWatch = nofwatch == null ? String.Empty : nofwatch.Value, 
        }); 
       } 
0

당신은 (MSDN XPathSelectElement 참조) XPathSelectElement를 사용하여 액세스 할 수있는 방법을 나에게 조언을 주시기 바랍니다

string str = 
@"<?xml version=""1.0""?> 
<sri> 
    <item><listingInfo><watchCount>1</watchCount></listingInfo></item> 
    <item><listingInfo><watchCount>2</watchCount></listingInfo></item> 
</sri>"; 

XDocument xdoc = XDocument.Parse(str); 
var searchResultItems = xdoc.Descendants().Where(x => x.Name.LocalName == "item"); 
foreach (var item in searchResultItems) 
{ 
    var wc = item.XPathSelectElement("listingInfo/watchCount"); 
    Console.WriteLine(wc.Value); 
}