我正在尝试从一个HTML文档中特定的图像,使用HTML的灵活性包和此XPath:选择属性与HTML敏捷性包值
//div[@id='topslot']/a/img/@src
据我所看到的,它找到的SRC - 属性,但它返回img标签。这是为什么?
我期望InnerHtml/InnerText或东西被设置,但都是空字符串。 OuterHtml设置为完整的img标签。
是否有任何Html Agility Pack的文档?
我正在尝试从一个HTML文档中特定的图像,使用HTML的灵活性包和此XPath:选择属性与HTML敏捷性包值
//div[@id='topslot']/a/img/@src
据我所看到的,它找到的SRC - 属性,但它返回img标签。这是为什么?
我期望InnerHtml/InnerText或东西被设置,但都是空字符串。 OuterHtml设置为完整的img标签。
是否有任何Html Agility Pack的文档?
Html敏捷包属性选择。
Html Agility Pack很快就会支持它。
http://htmlagilitypack.codeplex.com/Thread/View.aspx?ThreadId=204342
如果使用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敏捷性包
您可以读取和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;
}
}
我用下面的方法来获取图像的属性。
var MainImageString = MainImageNode.Attributes.Where(i=> i.Name=="src").FirstOrDefault();
您可以指定属性名称以获取其值;如果您不知道属性名称,请在获取节点并将鼠标悬停在其上以查看其属性后给出断点。
希望我帮了忙。
我只是用它来选择属性align设置为居中的所有div。 “// div [@ align ='center']” – clamchoda 2013-10-15 20:30:52
这可能需要一些解决方法,请参阅下面的答案。 – 2014-10-02 12:38:18