2016-06-09 7 views
0

Я новичок в программировании и не понимаю, почему этот код:Xml, C#, XmlNodeList не выбран узлы

XmlNodeList elemPrice = doc.SelectNodes(
    "//Items/Item/Offers/Offer/OfferListing/Price/FormattedPrice"); 

не дают выбранные узлы. Я смотрел XML-документ для получения xpath, и это правильно.

Это дает нуль в searchedItem.Price линии, когда пытался выполнить это:

List <SearchedItem> searchedItems = new List<SearchedItem>(); 

for (int i = 0; i < elemAsin.Count; i++) 
{ 
    SearchedItem searchedItem = new SearchedItem(); 
    searchedItem.Asin = elemAsin[i].InnerText; 
    searchedItem.CurrencyCode = elemCurrencyCode[i].InnerText; 
    string price = elemPrice[i].InnerText.Remove(0, 1); 
    searchedItem.Price = double.Parse(price); 
    searchedItems.Add(searchedItem); 
} 

return searchedItems; 
+2

Пожалуйста, разместите свой xml –

+0

* «Я смотрел XML-документ для получения xpath, и он прав» *. Правильно, это будет работать. Вам нужно включить XML, поскольку он стоит, никто не может дать вам ответ. –

+1

У вас, вероятно, есть пространство имен в xml, которое вызывает проблему. – jdweng

ответ

0

Я нашел другой способ для разбора XML, который хорошо и легко.

public static List<SearchedItem> ItemSearchResponse(string url) 
    { 
     List<SearchedItem> searchedItems = new List<SearchedItem>(); 

     WebRequest request = HttpWebRequest.Create(url); 
     HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse(); 

     XmlDocument doc = new XmlDocument(); 

     StreamReader reader = new StreamReader(webResponse.GetResponseStream()); 

     doc.LoadXml(reader.ReadToEnd()); 

     XmlNodeList listIsValid = doc.GetElementsByTagName("IsValid"); 

     if (listIsValid.Count > 0 && listIsValid[0].InnerXml == "True") 
     { 
      XmlNodeList listItems = doc.GetElementsByTagName("Item"); 

      foreach (XmlNode nodeItem in listItems) 
      { 
       SearchedItem searchedItem = new SearchedItem(); 

       foreach (XmlNode nodeChild in nodeItem.ChildNodes) 
       { 
        if (nodeChild.Name == "DetailPageURL") 
        { 
         searchedItem.DetailPageURL = nodeChild.InnerText; 
        } 

        else if (nodeChild.Name == "SmallImage") 
        { 
         foreach (XmlNode nodeURLImg in nodeChild.ChildNodes) 
         { 
          if (nodeURLImg.Name == "URL") 
          { 
           searchedItem.SmallImage = nodeURLImg.InnerText; 
          } 
         } 
        } 

        else if (nodeChild.Name == "ItemAttributes") 
        { 
         foreach (XmlNode nodeItemAtributes in nodeChild.ChildNodes) 
         { 
          if (nodeItemAtributes.Name == "Title") 
          { 
           searchedItem.Title = nodeItemAtributes.InnerText; 
          } 
         } 
        } 

        else if (nodeChild.Name == "OfferSummary") 
        { 
         foreach (XmlNode nodeOfferSummary in nodeChild.ChildNodes) 
         { 
          if (nodeOfferSummary.Name == "LowestNewPrice") 
          { 
           foreach (XmlNode nodeLowestNewPrice in nodeOfferSummary.ChildNodes) 
           { 
            if (nodeLowestNewPrice.Name == "CurrencyCode") 
            { 
             searchedItem.CurrencyCode = nodeLowestNewPrice.InnerText; 
            } 

            else if (nodeLowestNewPrice.Name == "FormattedPrice") 
            { 
             string price = nodeLowestNewPrice.InnerText.Remove(0, 1); 
             searchedItem.Price = Double.Parse(price); 
             break; 
            } 
           } 
          } 
         } 
        } 

        else if (nodeChild.Name == "CustomerReviews") 
        { 
         foreach (XmlNode nodeCustomerReview in nodeChild.ChildNodes) 
         { 
          if (nodeCustomerReview.Name == "Review") 
          { 
           foreach (XmlNode nodeReview in nodeCustomerReview.ChildNodes) 
           { 
            if (nodeReview.Name == "Content") 
            { 
             searchedItem.CustomerReview = nodeReview.InnerText; 
            } 
           } 
          } 
         } 
        } 
       } 
       searchedItems.Add(searchedItem); 
      } 
     } 
        return searchedItems; 
    } 

Благодарим вас за помощь!

0

Обеспечение простой пример выбора узлов с Xpath, попробуйте этот способ

 XmlDocument doc = new XmlDocument(); 

     doc.Load(@"c:\XMLFile.xml"); 

     XmlNodeList elemPrice = doc.SelectNodes("/catalog/cd/price"); 

     for (int i = 0; i < elemPrice.Count; i++) 
     { 
      Console.WriteLine(elemPrice[i].Name); 
      Console.WriteLine(elemPrice[i].InnerText); 
     } 

<?xml version="1.0" encoding="utf-8" ?> 
 
<catalog> 
 
    <cd country="USA"> 
 
    <title>Empire Burlesque</title> 
 
    <artist>Bob Dylan</artist> 
 
    <price>10.90</price> 
 
    </cd> 
 
    <cd country="UK"> 
 
    <title>Hide your heart</title> 
 
    <artist>Bonnie Tyler</artist> 
 
    <price>10.0</price> 
 
    </cd> 
 
    <cd country="USA"> 
 
    <title>Greatest Hits</title> 
 
    <artist>Dolly Parton</artist> 
 
    <price>9.90</price> 
 
    </cd> 
 
</catalog>

Выход цены 10,90 цены 10,0 цены 9,90

 Смежные вопросы

  • Нет связанных вопросов^_^