2016-10-01 2 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 тег не закрыт, я» м пытается получить 6 и 0, используя этот код:

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

переменная div содержит HTML выше. Проблема в том, что я получаю null по этому коду: (div.SelectSingleNode(".//img[0]").

Возможно, потому что тег не закрыт, infact Я вижу только один элемент внутри переменной 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

Смежные вопросы