无法获取img标记内容

时间:2016-10-01 12:27:40

标签: c# html-agility-pack

我正在使用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标记未关闭,我正在尝试使用此代码获取60

Convert.ToInt32(div.SelectSingleNode(".//img[0]").InnerText.Trim())

div变量包含上面的html。问题是我对此代码null获得(div.SelectSingleNode(".//img[0]")

也许'因为标签没有关闭,事实上我只看到div变量中包含所有img标签的一个项目。

我该如何解决这个问题?

1 个答案:

答案 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