Testo interno del nodo che ignora il testo interno dei bambini

c# html-agility-pack xpath

Domanda

Perdonami se sembra troppo semplice per essere chiesto qui, ma poiché questo è il mio primo giorno con il pacchetto html-agility, non riesco a trovare un modo per selezionare il testo interno di un nodo che è il figlio diretto del nodo e ignorando il testo interno dei nodi figli.

Per esempio

<div id="div1">
   <div class="h1"> this needs to be selected
   <small> and not this</small>
   </div>
</div>

attualmente sto provando questo

<div id="div1">
   <div class="h1"> this needs to be selected
   <small> and not this</small>
   </div>
</div>

che restituisce l'intero testo (ad esempio, questo deve essere selezionato e non questo). Eventuali suggerimenti??

Risposta accettata

Puoi usare l'opzione /text() per ottenere tutti i nodi di testo direttamente sotto un tag specifico. Se hai solo bisogno del primo, aggiungi [1] ad esso:

page.LoadHtml(text);
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']/text()[1]");
string selText = s.InnerText; 

Risposta popolare

Il div potrebbe avere più nodi di testo se c'è del testo prima e dopo i suoi figli. Come ho indicato similmente qui , penso che il modo migliore per ottenere tutto il contenuto del testo diretto di un nodo sia di fare qualcosa del tipo:

HtmlDocument page = new HtmlWeb().Load(url);
var nodes = page.DocumentNode.SelectNodes("//div[@id='div1']//div[@class='h1']/text()");

StringBuilder sb  = new StringBuilder();
foreach(var node in nodes)
{
   sb.Append(node.InnerText);
}

string content = sb.ToString();



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é