Je veux extraire le texte "Certains textes vont ici" entre la classe div. J'utilise html agility pack, et c #
<div class="productDescriptionWrapper">
Some Text Goes here...
<div class="emptyClear"> </div>
</div>
c'est ce que j'ai
Description = doc.DocumentNode.SelectNodes("//div[@class=\"productDescriptionWrapper\").Descendants("div").Select(x => x.InnerText).ToList();
Je reçois cette erreur:
An unhandled exception of type 'System.NullReferenceException'
Je sais comment extraire si le texte est b / wa <h1>
ou <p>
au lieu de "div" dans Descendants, je dois donner "h1" ou "p".
Quelqu'un s'il vous plaît aider.
Utilisez des guillemets simples tels que
//div[@class='productDescriptionWrapper']
pour obtenir tous les descendants de tous types, utilisez:
//div[@class='productDescriptionWrapper']//*
,
pour obtenir tous les descendants d'un type spécifique, tel qu'un p
utilisez //div[@class='productDescriptionWrapper']//p
.
pour obtenir tous les descendants qui sont soit un div
ou un p
:
//div[@class='productDescriptionWrapper']//*[self::div or self::p]
disons que vous vouliez obtenir tous les nœuds de texte descendant non vides, puis utilisez:
//div[@class='productDescriptionWrapper']//text()[normalize-space()]
Il n’existe aucun moyen d’obtenir une exception de référence null, doc
est créée à partir de l’extrait de code HTML que vous avez posté. Quoi qu'il en soit, si vous vouliez obtenir du texte dans le <div>
extérieur, mais pas à l'intérieur, utilisez alors xpath /text()
qui signifie obtenir des nœuds de texte enfant directs .
Par exemple, étant donné cet extrait HTML:
var html = @"<div class=""productDescriptionWrapper"">
Some Text Goes here...
<div class=""emptyClear"">Don't get this one</div>
</div>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
..cette expression renvoie le texte à partir de la <div>
extérieure uniquement:
var Description = doc.DocumentNode
.SelectNodes("//div[@class='productDescriptionWrapper']/text()")
.Select(x => x.InnerText.Trim())
.First();
//Description :
//"Some Text Goes here..."
..while en revanche, ce qui suit retourne tout le texte:
var Description = doc.DocumentNode
.SelectNodes("//div[@class='productDescriptionWrapper']")
.Select(x => x.InnerText.Trim())
.First();
//Description :
//"Some Text Goes here...
//Don't get this one"