Voglio usare il pacchetto agility HTML per analizzare i collegamenti immagine e href da una pagina HTML, ma non so molto di XML o XPath. Anche se ho cercato documenti di aiuto in molti siti web, non posso proprio risolvo il problema.Inoltre, io uso C# in VisualStudio 2005. E non riesco a parlare inglese correntemente, quindi, darò i miei sinceri ringraziamenti a chi può scrivere alcuni codici utili.Come ottenere img/src o a/hrefs utilizzando Html Agility Pack?
risposta
La first example sulla home page fa qualcosa di molto simile, ma prendere in considerazione:
HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm"); // would need doc.LoadHtml(htmlSource) if it is not a file
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
{
string href = link["href"].Value;
// store href somewhere
}
Così si può immaginare che per img src @, basta sostituire ogni a
con img
, e href
con src
. Si potrebbe anche essere in grado di semplificare a:
foreach(HtmlNode node in doc.DocumentElement
.SelectNodes("//a/@href | //img/@src")
{
list.Add(node.Value);
}
Per una manipolazione URL relativo, guardate la classe Uri
.
ringrazio molto e questa è la mia prima esperienza chiedendo – iShow
+1 @ Marc ... eccezionale ... Questo è esattamente quello che sto cercando ... –
ottengo l'errore:! DocumentElement non esiste in oggetto HtmlDocument per 1,4. 0.0 versione HtmlAgilityPack foreach (link HtmlNode a doc.DocumentNode.SelectNodes ("// un [@href]")) { HtmlAttribute att = link.Attributes [ "href"]; – Kiquenet
L'esempio e la risposta accettata sono errati. Non viene compilato con l'ultima versione. Provo qualcos'altro:
private List<string> ParseLinks(string html)
{
var doc = new HtmlDocument();
doc.LoadHtml(html);
var nodes = doc.DocumentNode.SelectNodes("//a[@href]");
return nodes == null ? new List<string>() : nodes.ToList().ConvertAll(
r => r.Attributes.ToList().ConvertAll(
i => i.Value)).SelectMany(j => j).ToList();
}
Questo funziona per me.
Forse sono qui troppo tardi per pubblicare una risposta. Quanto segue ha funzionato per me:
var MainImageString = MainImageNode.Attributes.Where(i=> i.Name=="src").FirstOrDefault();
E, Html Agility Pack può risolvere i percorsi relativi? – iShow