Ich möchte den Text "Irgendein Text geht hier" zwischen der Div-Klasse extrahieren. Ich verwende html Agility Pack und c #
<div class="productDescriptionWrapper">
Some Text Goes here...
<div class="emptyClear"> </div>
</div>
Das ist was ich habe:
Description = doc.DocumentNode.SelectNodes("//div[@class=\"productDescriptionWrapper\").Descendants("div").Select(x => x.InnerText).ToList();
Ich bekomme diesen Fehler:
An unhandled exception of type 'System.NullReferenceException'
Ich weiß, wie man extrahiert, wenn der Text b / wa <h1>
oder <p>
anstelle von "div" in Descendants ist, ich muss "h1" oder "p" geben.
Jemand bitte assistieren.
Verwenden Sie einfache Anführungszeichen wie z
//div[@class='productDescriptionWrapper']
Um alle Nachkommen aller Typen zu erhalten, benutze:
//div[@class='productDescriptionWrapper']//*
,
Um alle Nachkommen eines bestimmten Typs wie p
benutze //div[@class='productDescriptionWrapper']//p
.
um alle Nachkommen zu erhalten, die entweder ein div
oder ein p
:
//div[@class='productDescriptionWrapper']//*[self::div or self::p]
Sagen Sie, dass Sie alle nicht leeren Nachfolgertextknoten erhalten möchten, und verwenden Sie dann:
//div[@class='productDescriptionWrapper']//text()[normalize-space()]
Es gibt keine Möglichkeit, eine Nullreferenzausnahme zu erhalten, wenn das doc
aus dem von Ihnen geposteten HTML-Code erstellt wurde. Wie auch immer, wenn Sie Text innerhalb des äußeren <div>
, aber nicht vom inneren bekommen wollten, dann benutzen Sie xpath /text()
was bedeutet, dass Sie direkt untergeordnete Textknoten bekommen .
Zum Beispiel, angesichts dieses HTML-Snippets:
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);
..dieser Ausdruck gibt nur Text aus dem äußeren <div>
:
var Description = doc.DocumentNode
.SelectNodes("//div[@class='productDescriptionWrapper']/text()")
.Select(x => x.InnerText.Trim())
.First();
//Description :
//"Some Text Goes here..."
..im Gegensatz dazu geben die folgenden den gesamten Text zurück:
var Description = doc.DocumentNode
.SelectNodes("//div[@class='productDescriptionWrapper']")
.Select(x => x.InnerText.Trim())
.First();
//Description :
//"Some Text Goes here...
//Don't get this one"