使用html Agility Pack选择属性值

时间:2009-02-12 15:57:40

标签: c# .net xpath html-agility-pack

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

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

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

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

Html Agility Pack是否有任何文档?

6 个答案:

答案 0 :(得分: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;

答案 1 :(得分:11)

Html Agility Pack does not support属性选择。

答案 2 :(得分:7)

您可以使用方法“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);
}

答案 3 :(得分:1)

答案 4 :(得分: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;
                }
            }

答案 5 :(得分:0)

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

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

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

希望我帮助过。