Как получить текст без тега с htmlAgilityPack

c# html html-agility-pack xpath

Вопрос

У меня есть html-файл, как показано ниже.

  <div>

  <div style="margin-left:0.5em;">
  <div class="tiny" style="margin-bottom:0.5em;">
  <b><span class="h3color tiny">This review is from: </span>You Meet</b>
  </div>
  If you know Ron Kaufman as I do ...
  <br /><br />Whether you're the CEO....
  <br /><br />Written in a distinctive, ...
  <br /><br />My advice? Don't just get one copy
  <div style="padding-top: 10px; clear: both; width: 100%;"></div>
  </div>

  <div style="margin-left:0.5em;">
  <div class="tiny" style="margin-bottom:0.5em;">
  <b><span class="h3color tiny">This review is from: </span>My Review</b>
  </div>
  I became a fan of Ron Kaufman after reading an earlier book of his years ago...
  <div style="padding-top: 10px; clear: both; width: 100%;"></div>
  </div>

  </div>

Я хочу получить текст обзора, который не имеет html-тега. Я использую ниже код сейчас

  foreach (HtmlNode divReview in doc.DocumentNode.SelectNodes(@"//div[@style='margin-left:0.5em;']"))   
   {
      if (divReview != null)
          {

 review.Add(divReview.Descendants("div").Where(d => d.Attributes.Contains("style") && 
 d.Attributes["style"].Value.Contains("padding-top: 10px; clear: both; width: 100%;")).
                                          Select(d =>
 d.PreviousSibling.InnerText.Trim()).SingleOrDefault());  
          }
       }

которые возвращают «Мой совет? Не просто получить один экземпляр», как я могу получить весь текст?

Обновление: даже если я удалю все

«Ш»

тег из htmlnode, все еще, когда используется приведенный выше код, я получаю только часть «Мой совет? Не просто получить одну копию» !!! любой комментарий?

Принятый ответ

Я обновил код до этого:

var allText = (reviewDiv.Descendants("div")
  .First(div => div.Attributes["style"].Value == "padding-top: 10px; clear: both; width: 100%;")
  .SelectNodes("./preceding-sibling::text()") ?? new HtmlNodeCollection(null)) 
  .Select(text => text.InnerText);

Это должно возвращать IEnumerable строк с текстом, предшествующим div, с запутанным стилем.

Не имея немного больше окружающего HTML, трудно сказать, действительно ли это именно то, что вам нужно. В настоящее время я предполагаю, что вы выбрали div и что div является прямым родителем всего этого блока текста (учитывая вашу ссылку на reviewDiv). Ваш HTML-образец, похоже, не содержит этот фрагмент HTML, поэтому я делаю несколько предположений здесь.

Со следующим вводом:

<div><div class="tiny" style="margin-bottom:0.5em;">
<b><span class="h3color tiny">This review is from: </span>You Meet</b>
</div>
If you know Ron Kaufman as I do ...
<br /><br />Whether you're the CEO....
<br /><br />Written in a distinctive, ...
<br /><br />My advice? Don't just get one copy
<div style="padding-top: 10px; clear: both; width: 100%;"></div></div>

Он извлекает это:

Если вы знаете Рона Кауфмана, как я ...
Являетесь ли вы генеральным директором ...
Написано в отличительной, ...
Мой совет? Не просто получить один экземпляр

Чтобы создать одну строку, я использовал: string extractedText = string.Join("", allText);



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему