我正在使用HtmlAgilityPack
而我正在尝试将这两个图片内容标记为内容:
<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标签的一个项目。
我该如何解决这个问题?
答案 0 :(得分:1)
你得到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()));
<强> dotnetfiddle
强>
输出
6