Quiero extraer el texto "Algún texto va aquí" entre la clase div. Estoy usando el paquete de agilidad html, y c #
<div class="productDescriptionWrapper">
Some Text Goes here...
<div class="emptyClear"> </div>
</div>
Esto es lo que tengo :
Description = doc.DocumentNode.SelectNodes("//div[@class=\"productDescriptionWrapper\").Descendants("div").Select(x => x.InnerText).ToList();
Me sale este error:
An unhandled exception of type 'System.NullReferenceException'
Sé cómo extraer si el texto es b / wa <h1>
o <p>
lugar de "div" en Descendientes, tendré que dar "h1" o "p".
Alguien por favor ayuda.
Use comillas simples como
//div[@class='productDescriptionWrapper']
Para obtener todos los descendientes de todo tipo de uso:
//div[@class='productDescriptionWrapper']//*
,
para obtener todos los descendientes de un tipo específico como p
entonces use //div[@class='productDescriptionWrapper']//p
.
para obtener todos los descendientes que sean div
o p
:
//div[@class='productDescriptionWrapper']//*[self::div or self::p]
diga que desea obtener todos los nodos de texto descendente que no estén en blanco, luego use:
//div[@class='productDescriptionWrapper']//text()[normalize-space()]
No hay forma de obtener una excepción de referencia nula dado que el doc
se crea a partir de un fragmento de código HTML que publicó. De todos modos, si quería obtener texto dentro de la <div>
externa, pero no desde la interna, use xpath /text()
que significa obtener nodos de texto secundarios directos .
Por ejemplo, dado este fragmento de código 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);
.. esta expresión devuelve texto desde el exterior <div>
solo:
var Description = doc.DocumentNode
.SelectNodes("//div[@class='productDescriptionWrapper']/text()")
.Select(x => x.InnerText.Trim())
.First();
//Description :
//"Some Text Goes here..."
... mientras que en contraste, lo siguiente devuelve todo el texto:
var Description = doc.DocumentNode
.SelectNodes("//div[@class='productDescriptionWrapper']")
.Select(x => x.InnerText.Trim())
.First();
//Description :
//"Some Text Goes here...
//Don't get this one"