2009-02-12 51 views
8

我正在尝试从一个HTML文档中特定的图像,使用HTML的灵活性包和此XPath:选择属性与HTML敏捷性包值

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

据我所看到的,它找到的SRC - 属性,但它返回img标签。这是为什么?

我期望InnerHtml/InnerText或东西被设置,但都是空字符串。 OuterHtml设置为完整的img标签。

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

回答

11

Html敏捷包​​属性选择。

+5

我只是用它来选择属性align设置为居中的所有div。 “// div [@ align ='center']” – clamchoda 2013-10-15 20:30:52

+0

这可能需要一些解决方法,请参阅下面的答案。 – 2014-10-02 12:38:18

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

阅读和写作的HTML敏捷性包

您可以读取和HtmlAgilityPack的属性设置属性。本示例选择< html>标记并选择'lang'(language)属性(如果它存在),然后读取和写入'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; 
       } 
      } 
0

我用下面的方法来获取图像的属性。

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

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

希望我帮了忙。