2014-01-02 2 views
1

Прежде чем объяснять, я использую VB.net и HtmlAgilityPack.Как я могу получить несколько похожих тегов с помощью HtmlAgilityPack?

У меня есть нижний html, все три секции имеют одинаковый формат. Я использую htmlagilitypack для извлечения данных из заголовка и даты. Мой код извлекает название правильно, но дата только извлекается из первой инстанции и повторяется 3 раза:

HtmlAgilityPack код:

For Each h4 As HtmlNode In docnews.DocumentNode.SelectNodes("//h4[(@class='title')]") 
    Dim date1 As HtmlNode = docnews.DocumentNode.SelectSingleNode("//span[starts-with(@class, 'date ')]") 
    Dim newsdate As String = date1.InnerText 
    MessageBox.Show(h4.InnerText) 
    MessageBox.Show(newsdate) 
Next 

я думал, что быть в каждом h4, я связанный с ним дату соответственно .. .

HTML код:

<div class="article-header" style="" data-itemid="920729" data-source="ABC" data-preview="Text 1"> 
<h4 class="title"><a href="URL" class="title" title="Text 1">Text for Mr. A</a></h4> 
    <div class="byline"> 
     <span class="date timestamp"><span title="29 November 2013">29-11-2013</span></span> 
     <span class="source" title="AGE">18</span> 
    </div> 
    <div class="preview">Text 1 Preview</div> 
</div> 

<div class="article-header" style="" data-itemid="920720" data-source="ABC" data-preview="Text 2"> 
<h4 class="title"><a href="URL" class="title" title="Text 2">Text for Mr. B</a></h4> 
    <div class="byline"> 
     <span class="date timestamp"><span title="27 November 2013">27-11-2013</span></span> 
     <span class="source" title="AGE">25</span> 
    </div> 
    <div class="preview">Text 2 Preview</div> 
</div> 

<div class="article-header" style="" data-itemid="920719" data-source="ABC" data-pre+view="Text 3"> 
<h4 class="title"><a href="URL" class="title" title="Text 3">Text for Mr. C</a></h4> 
    <div class="byline"> 
     <span class="date timestamp"><span title="22 October 2013">22-10-2013</span></span> 
     <span class="source" title="AGE">20</span> 
    </div> 
    <div class="preview">Text 3 Preview</div> 
</div> 

Окончательный выход должен быть:

Текст для г A

29-11-2013

Текст для г B

27-11-2013

Текст для г-н C

22 -10-2013

Что я буду получать с кодом:

Текст для г A

29-11-2013

Текст для г B

29-11-2013

Текст для г-н C

29-11-2013

Любая помощь очень ценится.

ответ

1

Вы должны прикрепить второй XPath смотреть «снизу» в h4:

Dim date1 As HtmlNode = h4.Parent.SelectSingleNode(".//span[starts-with(@class, 'date ')]") 
         ^^^^^^^^^     ^^^ 

.// говорит Xpath смотреть под узлом Xpath выполняется на. Таким образом, вызывая SelectSingleNode на h4.Parent, вы получаете дату ниже родительского тега divh4.

+0

Я пробовал код, и он сгенерировал ошибку «System.NullReferenceException», но когда я удалил .// и заменил его //, он работал так же, как и раньше. Такая же дата для всех трех экземпляров. .. спасибо за ваш быстрый ответ! –

+0

'//' будет искать из корневого узла. Он должен начинаться с './/' – jessehouwing

+0

Спасибо jessehouwing, я думаю, я знаю, где моя ошибка, тег h4 закрывается перед датой ... Будет работать над этим сейчас. Еще раз спасибо ! –

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