2016-10-06 1 views
0

я должен получить HTML код в Интернете, и после этого, чтобы найти этот класс:Как сохранить часть очень большого потока HTML?

<span class='uccResultAmount'>0,896903</span> 

Я попытался с регулярного выражения. А также с Потоки, я имею в виду, храня все HTML код в string. Однако код очень большой для string. Так что это невозможно, потому что сумма 0,896903, которую я ищу, не существует в string.

Есть ли способ прочитать только небольшой блок потока?

Часть метода:

public static string getValue() 
     { 
      string data = "not found"; 
      string urlAddress = "http://www.xe.com/es/currencyconverter/convert/?Amount=1&From=USD&To=EUR"; 

      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress); 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

      if (response.StatusCode == HttpStatusCode.OK) 
      { 
       Stream receiveStream = response.GetResponseStream(); 
       StreamReader readStream = null; 

       if (response.CharacterSet == null) 
       { 
        readStream = new StreamReader(receiveStream); 
       } 
       else 
       { 
        readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet)); 
       } 

       data = readStream.ReadToEnd(); // the string in which I should search for the amount 

       response.Close(); 
       readStream.Close(); 
      } 

Если вы нашли простой способ, чтобы исправить мою проблему, дайте мне знать это.

ответ

0

Я хотел бы использовать HtmlAgilityPack и Xpath

var web = new HtmlAgilityPack.HtmlWeb(); 
var doc = web.Load("http://www.xe.com/es/currencyconverter/convert/?Amount=1&From=USD&To=EUR"); 
var value = doc.DocumentNode.SelectSingleNode("//span[@class='uccResultAmount']") 
       .InnerText; 

версия Linq также возможно

var value = doc.DocumentNode.Descendants("span") 
      .Where(s => s.Attributes["class"] != null && s.Attributes["class"].Value == "uccResultAmount") 
      .First() 
      .InnerText; 

Don't use this. Просто чтобы показать

Но проблема в том, что этот HTML код не помещается в одной строке

не является правильным

string html = new WebClient().DownloadString("http://www.xe.com/es/currencyconverter/convert/?Amount=1&From=USD&To=EUR"); 
var val = Regex.Match(html, @"<span[^>]+?class='uccResultAmount'>(.+?)</span>") 
       .Groups[1] 
       .Value; 
+0

Будет ли способ сделать это без использования HtmlAgilityPack? –

+0

@OscarM Вам нужен инструмент для разбора html. Вы не можете использовать Regex http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

+0

Но проблема в том, что этот HTML-код не помещается в одну строку , поэтому я не могу разобрать что-то, что не содержит нужную подстроку. –

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

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