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

i will die Zeichenfolge „Urheberrecht © FUCHS Online Ltd, 2013. Alle Rechte“ erhalten. mein C# -Code ist ---Wie Wert eines Attributs erhalten, indem 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(); 
     } 

aber es Retuns mir so etwas wie "HtmlAgilityPack.HtmlNodeCollection"

+0

Der Text, den Sie erhalten möchten, ist kein Attribut - es ist ein Textknoten im DOM. Was ein html-Attribut ist, [Xml attributes] (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- wQFggMAI & url = http% 3A% 2F% 2Fwww.w3schools.com% 2Fxml% 2Fxml_attributes.asp & usg = AFQjCNG3z_8GA13PwLrj2SQRv2uLSbyCtg & sig2 = 8f2bj2MH369BcREluiGZkA). – Veverke

+0

@Veverke, das ein Stück Fehlinformation durch ein anderes ersetzt, ist wahrscheinlich keine so gute Idee. XML ist kein HTML und die Regeln für Attribute sind unterschiedlich (obwohl ähnlich). – spender

+0

@Spender: Ist HTML nicht eine Teilmenge von XML? Ich dachte, XML sei der Überbegriff für alle "markierten" Datenstrukturierungsformate. Ich meine, wenn alle diese markierten Sprachen "Extensible Markup Languages" sind, dann dachte ich, dass alle von xml abgeleitet werden. Scheint, dass meine einseitige Verbindung mit Extensible Markup Language und XML falsch ist (xml ist die Abkürzung für Extensible Markup Language, während XML eine Implementierungsinstanz einer Extensible Markup Language darstellt). – Veverke

Antwort

0

Hier ist, was Sie tun können:

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); 
} 

Ausgang:

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

, aber es sagte, Htmlagility Pack enthält keine Definition von InnerText – nayan

+0

InnerText funktioniert nur, wenn wir SelectSingleNode() Metod verwendet; – nayan

+0

was ist, wenn Sie link.Document.Body.InnerText –

1

Sie benötigen den Wert eines Knotens. Daher ist es besser, SelectSingleNode Methode zu verwenden.

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; 

Auch Sie können die HTML-Entität &copy; entschlüsseln müssen.

+0

Dies sollte die ausgewählte Antwort in der Tat sein. Wir alle haben gemerkt, dass wir es mit IDs zu tun haben (obwohl Seiten Entwickler nicht daran hindern werden, wiederholte IDs über das dom hinweg zu verwenden, in welchen Fällen selectsingle nicht die gewünschten Ergebnisse liefert, aber das sind Kanten und nicht wahrscheinliche Fälle). – Veverke

Verwandte Themen