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
HtmlDocument page = new HtmlWeb().Load(url);
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']");
string selText = s.innerText;
che restituisce l'intero testo (ad esempio, questo deve essere selezionato e non questo). Eventuali suggerimenti??
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;
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();