Come ottenere testo privo di tag con htmlAgilityPack

c# html html-agility-pack xpath

Domanda

Ho un file html come sotto

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

Voglio ottenere il testo della recensione che non ha alcun tag html. Sto usando sotto il codice ora

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

che restituisce solo "Il mio consiglio? Non ottenere solo una copia", come posso ottenere l'intero testo?

Aggiornamento: anche se rimuovo tutto

"Br"

tag da htmlnode, ancora quando uso il codice sopra ho solo la parte "Il mio consiglio? Non solo avere una copia" !!! qualche commento?

Risposta accettata

Ho aggiornato il codice a questo:

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);

Questo dovrebbe restituire un IEnumerable di stringhe con il testo che precede il div con lo stile complesso.

Senza avere un po 'più dell'HTML circostante è difficile dire se questo è esattamente ciò che stai cercando. Attualmente sto indovinando che hai selezionato un div e che quel div è il genitore diretto di tutto questo blocco di testo (dato il tuo riferimento a una recensioneDiv). Il tuo esempio HTML non sembra contenere questo pezzo di HTML, quindi qui sto facendo alcune ipotesi.

Con il seguente input:

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);

Estrae questo:

Se conosci Ron Kaufman come faccio io ...
Se sei il CEO ....
Scritto in modo distintivo, ...
Il mio consiglio? Non prendine una copia

Per costruire una singola stringa ho usato: string extractedText = string.Join("", allText);




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché