2016-10-01 134 views
1

我使用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标签没有关闭,我米尝试使用此代码来获取60

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

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

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

我该如何解决这个问题?

回答

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 
+0

谢谢我不知道这种做法 – Unchained