使用html Agility Pack选择属性值

我正在尝试使用html敏捷包和此xpath从html文档中检索特定图像:

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

据我所知,它找到了src-attribute,但它返回了img-tag。 这是为什么?

我希望设置InnerHtml / InnerText或其他东西,但两者都是空字符串。 OuterHtml设置为完整的img-tag。

有没有Html Agility Pack的文档?

Html Agility Pack 不支持属性选择。

如果您使用HtmlNavigator则可以直接获取属性。

 //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; 

您可以使用方法“GetAttributeValue”。

例:

 //[...] 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); } 

使用Html Agility Pack读取和写入属性

您可以在HtmlAgilityPack中读取和设置属性。 此示例选择标记并选择“lang”(语言)属性(如果存在),然后读取和写入“lang”属性。

在下面的示例中,doc.LoadHtml(this.All),“this.All”是html文档的字符串表示forms。

读和写:

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

只读:

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

我使用以下方法获取图像的属性。

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

您可以指定属性名称以获取其值; 如果您不知道属性名称,请在获取节点后通过将鼠标hover在节点上来查看其属性。

希望我帮忙。