没能获得img标签内容
问题描述:
我使用HtmlAgilityPack
,我试图让这两个图像标签中的内容:没能获得img标签内容
<div style="padding-left: 27px;">
<img src="http://s1.swimg.net/gsmf/578/img/events/appearance.png" width="13" height="13" alt="Presenze" title="Presenze"> 6
<img src="http://s1.swimg.net/gsmf/578/img/events/G.png" width="13" height="13" alt="Goal" title="Goal"> 0
</div>
如何可以看到每个img标签没有关闭,我米尝试使用此代码来获取6
和0
:
Convert.ToInt32(div.SelectSingleNode(".//img[0]").InnerText.Trim())
的div
变量包含上面的HTML。问题是我在此代码上获得null
:(div.SelectSingleNode(".//img[0]")
。
也许是因为标签没有关闭,事实上我看到div
变量中只有一个项目包含所有的img标签。
我该如何解决这个问题?
答
你有null
主要是因为XPath索引从1开始,不 0的目标文本的img
而不是内容/内部文本然而,被视为兄弟。
也就是说,您可以使用following-sibling::text()
并将结果限制为1,以获得img
元素后面最近的文本节点。例如在第一img
元素之后得到的文本,可以使用以下XPath:
//img[1]/following-sibling::text()[1]
完整的演示:
var raw = @"<div style=""padding-left: 27px;"">
<img src=""http://s1.swimg.net/gsmf/578/img/events/appearance.png"" width=""13"" height=""13"" alt=""Presenze"" title=""Presenze""> 6
<img src=""http://s1.swimg.net/gsmf/578/img/events/G.png"" width=""13"" height=""13"" alt=""Goal"" title=""Goal""> 0
</div>";
var document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(raw);
var query = "//img[1]/following-sibling::text()[1]";
var txt = document.DocumentNode.SelectSingleNode(query);
Console.WriteLine(Convert.ToInt32(txt.InnerText.Trim()));
输出:
6
谢谢我不知道这种做法 – Unchained