我想提取文字"有些文字在这里"在div类之间。 我正在使用html敏捷包和c#
<div class="productDescriptionWrapper">
Some Text Goes here...
<div class="emptyClear"> </div>
</div>
这就是我所拥有的:
Description = doc.DocumentNode.SelectNodes("//div[@class=\"productDescriptionWrapper\").Descendants("div").Select(x => x.InnerText).ToList();
我收到此错误:
An unhandled exception of type 'System.NullReferenceException'
我知道如果文字是短信<h1>
或<p>
而不是&#34; div&#34;在后代,我将不得不给#34; h1&#34;或&#34; p&#34;。
有人请你协助。
答案 0 :(得分:1)
使用单引号,例如
//div[@class='productDescriptionWrapper']
获取所有类型的所有后代:
//div[@class='productDescriptionWrapper']//*
,
获取特定类型的所有后代
例如p
然后使用//div[@class='productDescriptionWrapper']//p
。
获取div
或p
的所有后代:
//div[@class='productDescriptionWrapper']//*[self::div or self::p]
说你想获得所有非空白后代文本节点,然后使用:
//div[@class='productDescriptionWrapper']//text()[normalize-space()]
答案 1 :(得分:1)
如果从您发布的HTML代码段创建doc
,则无法获得空引用异常。无论如何,如果您想在外部<div>
内获取文本,而不是从内部文本中获取文本,请使用xpath /text()
,这意味着获取直接子文本节点。
例如,给定此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);
..此表达式仅返回外部<div>
的文本:
var Description = doc.DocumentNode
.SelectNodes("//div[@class='productDescriptionWrapper']/text()")
.Select(x => x.InnerText.Trim())
.First();
//Description :
//"Some Text Goes here..."
..而相反,以下返回所有文字:
var Description = doc.DocumentNode
.SelectNodes("//div[@class='productDescriptionWrapper']")
.Select(x => x.InnerText.Trim())
.First();
//Description :
//"Some Text Goes here...
//Don't get this one"