10

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

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

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

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

是否有任何有关 Html Agility Pack 的文档?

4

7 回答 7

15

如果您使用的是,您可以直接获取该属性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;
于 2013-03-14T17:03:48.437 回答
12

Html Agility Pack不支持属性选择。

于 2009-02-23T00:30:58.880 回答
8

您可以使用“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);
}
于 2013-03-31T07:00:12.783 回答
1

Html Agility Pack 很快就会支持它。

http://htmlagilitypack.codeplex.com/Thread/View.aspx?ThreadId=204342

于 2010-06-26T17:31:32.313 回答
1

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

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

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

读和写:

            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;
                }
            }
于 2015-12-25T14:01:32.843 回答
0

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

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

可以指定属性名来获取它的值;如果您不知道属性名称,请在获取节点后给出断点并通过将鼠标悬停在其上来查看其属性。

希望我有所帮助。

于 2016-09-06T10:02:43.667 回答
0

我刚刚遇到这个问题并使用 GetAttributeValue 方法解决了它。

//Selecting all tbody elements
IList<HtmlNode> nodes = doc.QuerySelectorAll("div.characterbox-main")[1]
.QuerySelectorAll("div table tbody");

//Iterating over them and getting the src attribute value of img elements.
var data = nodes.Select((node) =>
{
     return new
     {
         name = node.QuerySelector("tr:nth-child(2) th a").InnerText,
         imageUrl = node.QuerySelector("tr td div a img")
         .GetAttributeValue("src", "default-url")
     };
});
于 2021-09-01T11:43:15.580 回答