Frage

Ich versuche, ein bestimmtes Bild von einem HTML-Dokument abrufen, html Agilität Packs und diese mithilfe von XPath:

//div[@id='topslot']/a/img/@src

Soweit ich sehen kann, findet er das src-Attribut, aber es gibt den img-Tag. Warum das?

würde ich die Innerhtml / Inner oder etwas erwarten zu setzen, aber beide sind leere Strings. Outerhtml wird auf den kompletten img-Tag.

Gibt es Dokumentation für Html Agility-Pack?

War es hilfreich?

Lösung

Html Agility Pack- nicht unterstützt Attributauswahl.

Andere Tipps

Sie können direkt das Attribut greifen, wenn Sie die HtmlNavigator stattdessen verwenden.

//Load document from some html string
HtmlDocument hdoc = new HtmlDocument();
hdoc.LoadHtml(htmlContent);

//Load navigator for current document
HtmlNodeNavigator navigator = (HtmlNodeNavigator)hdoc.CreateNavigator();

//Get value from given xpath
string xpath = "//div[@id='topslot']/a/img/@src";
string val = navigator.SelectSingleNode(xpath).Value;

Sie können die Methode "GetAttributeValue" verwenden.

Beispiel:

//[...] code before needs to load a html document
HtmlAgilityPack.HtmlDocument htmldoc = e.Document;
//get all nodes "a" matching the XPath expression
HtmlNodeCollection AllNodes = htmldoc.DocumentNode.SelectNodes("*[@class='item']/p/a");
//show a messagebox for each node found that shows the content of attribute "href"
foreach (var MensaNode in AllNodes)
{
     string url = MensaNode.GetAttributeValue("href", "not found");
     MessageBox.Show(url);
}

Lesen und Schreiben Attribute mit Html Agility-Pack

Sie können sowohl lesen als auch die Attribute in HtmlAgilityPack gesetzt. Dieses Beispiel wählt den Tag und wählt das ‚lang‘ (Sprache) Attribut, wenn es vorhanden ist, und dann liest und schreibt auf das ‚lang‘ Attribut.

Im Beispiel unten, die doc.LoadHtml (this.All), "this.All" ist eine String-Darstellung eines HTML-Dokuments.

Lesen und Schreiben:

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(this.All);
            string language = string.Empty;
            var nodes = doc.DocumentNode.SelectNodes("//html");
            for (int i = 0; i < nodes.Count; i++)
            {
                if (nodes[i] != null && nodes[i].Attributes.Count > 0 && nodes[i].Attributes.Contains("lang"))
                {
                    language = nodes[i].Attributes["lang"].Value; //Get attribute
                    nodes[i].Attributes["lang"].Value = "en-US"; //Set attribute
                }
            }

Nur lesen:

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(this.All);
            string language = string.Empty;
            var nodes = doc.DocumentNode.SelectNodes("//html");
            foreach (HtmlNode a in nodes)
            {
                if (a != null && a.Attributes.Count > 0 && a.Attributes.Contains("lang"))
                {
                    language = a.Attributes["lang"].Value;
                }
            }

Ich habe die folgende Art und Weise die Attribute eines Bildes zu erhalten.

var MainImageString  = MainImageNode.Attributes.Where(i=> i.Name=="src").FirstOrDefault();

Sie können die Attributnamen angeben, um seinen Wert zu erhalten; wenn Sie nicht den Attributnamen kennen, einen Haltepunkt geben, nachdem Sie den Knoten geholt haben und seine Attribute sehen von schwebt über ihm.

Hope I geholfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top