2016-07-03 2 views
0
 <div id="footer"> 
      <div id="footertext"> 
       <p> 
        Copyright &copy; FUCHS Online Ltd, 2013. All Rights Reserved. 
       </p> 
      </div> 
     </div> 

я хочу получить строку «Copyright © FUCHS Интернет Ltd, 2013. Всех прав». мой C# код ---Как получить значение атрибута по HtmlAgilityPack

public string getvalue() 
     { 
     HtmlWeb web = new HtmlWeb(); 
     HtmlAgilityPack.HtmlDocument doc = web.Load("www.fuchsonline.com"); 
     var link = doc.DocumentNode.SelectNodes("//div[@id='footertext']"); 
     return link.ToString(); 
     } 

но Retuns мне что-то вроде "HtmlAgilityPack.HtmlNodeCollection"

+0

Текст, который вы хотите получить, не является атрибутом - это текстовый узел в DOM. Для чего является атрибут html, [атрибуты Xml] (https://www.google.co.il/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwipwY-OjtfNAhXkNJoKHV-fc- wQFggkMAI & URL = HTTP% 3A% 2F% 2Fwww.w3schools.com% 2Fxml% 2Fxml_attributes.asp & USG = AFQjCNG3z_8GA13PwLrj2SQRv2uLSbyCtg & Sig2 = 8f2bj2MH369BcREluiGZkA). – Veverke

+0

@Veverke, заменяя одну часть дезинформации другой, вероятно, не такая хорошая идея. XML - это не HTML, а правила для атрибутов разные (хотя похожие). – spender

+0

@Spender: не является ли html подмножеством XML? Я думал, что XML является зонтиком для всех «помеченных» форматов структурирования данных. Я имею в виду, что если все эти помеченные языки являются «расширяемыми языками разметки», я тогда подумал, что все «получают» из xml. Кажется, моя односторонняя связь с Extensible Markup Language и XML - это то, что неправильно (xml является сокращением расширяемого языка разметки, в сравнении с XML, представляющим экземпляр реализации расширяемого языка разметки). – Veverke

ответ

0

Вот что вы можете сделать:

string html = @" 
    <div id='footer'> 
     <div id='footertext'> 
      <p> 
       Copyright &copy; FUCHS Online Ltd, 2013. All Rights Reserved. 
      </p> 
     </div> 
    </div>"; 

//in my example I am not use HtmlWeb because I am working with the piece of html you provided. You will continue to you HtmlWeb and access the url... 
HtmlDocument htmlDoc = new HtmlDocument(); 
htmlDoc.LoadHtml(html); 

var texts = htmlDoc.DocumentNode.SelectNodes("//*[@id='footertext']").Select(n => n.InnerText.Trim()); 

foreach (var text in texts) 
{ 
    Console.WriteLine(text); 
} 

Выход:

enter image description here

0
public string getvalue() 
{ 
    HtmlWeb web = new HtmlWeb(); 
    HtmlAgilityPack.HtmlDocument doc =web.Load("www.fuchsonline.com"); 
    var link = doc.DocumentNode.SelectNodes("//div[@id='footertext']"); 
    return link.InnerText.ToString(); 
} 
+0

, но он сказал, что пакет htmlagility не содержит defination InnerText – nayan

+0

InnerText работает только тогда, когда мы использовали метод SelectSingleNode(); – nayan

+0

Что делать, если вы делаете ссылку.Document.Body.InnerText –

1

Вам нужно значение одного узла. Поэтому лучше использовать метод SelectSingleNode.

HtmlWeb web = new HtmlWeb(); 
var doc = web.Load("http://www.fuchsonline.com"); 
var link = doc.DocumentNode.SelectSingleNode("//div[@id='footertext']/p"); 

string rawText = link.InnerText.Trim(); 
string decodedText = HttpUtility.HtmlDecode(text); // or WebUtility 

return decodedText; 

Также вам может понадобиться для декодирования HTML сущности &copy;.

+0

Это действительно должен быть выбранный ответ. Мы все пропустили, что имеем дело с идентификаторами (хотя сайты не будут «препятствовать» разработчикам, использующим повторяющиеся идентификаторы через dom, в которых случаи selectsingle не получат желаемых результатов, но это крайние и маловероятные случаи). – Veverke

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