2017-10-22 36 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 = element.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); 
}