如何使用htmllagilitypack获取没有标签的文本

本文关键字:标签 文本 何使用 htmllagilitypack 获取 | 更新日期: 2023-09-27 18:12:55

我有一个像下面这样的html文件

  <div>
  <div style="margin-left:0.5em;">
  <div class="tiny" style="margin-bottom:0.5em;">
  <b><span class="h3color tiny">This review is from: </span>You Meet</b>
  </div>
  If you know Ron Kaufman as I do ...
  <br /><br />Whether you're the CEO....
  <br /><br />Written in a distinctive, ...
  <br /><br />My advice? Don't just get one copy
  <div style="padding-top: 10px; clear: both; width: 100%;"></div>
  </div>
  <div style="margin-left:0.5em;">
  <div class="tiny" style="margin-bottom:0.5em;">
  <b><span class="h3color tiny">This review is from: </span>My Review</b>
  </div>
  I became a fan of Ron Kaufman after reading an earlier book of his years ago...
  <div style="padding-top: 10px; clear: both; width: 100%;"></div>
  </div>
  </div>

我想得到没有任何html标签的评论文本。我现在使用下面的代码

  foreach (HtmlNode divReview in doc.DocumentNode.SelectNodes(@"//div[@style='margin-left:0.5em;']"))   
   {
      if (divReview != null)
          {
 review.Add(divReview.Descendants("div").Where(d => d.Attributes.Contains("style") && 
 d.Attributes["style"].Value.Contains("padding-top: 10px; clear: both; width: 100%;")).
                                          Select(d =>
 d.PreviousSibling.InnerText.Trim()).SingleOrDefault());  
          }
       }

只返回"My advice? "不要只得到一份",我怎么能得到整篇文章?"

更新:即使我删除了所有

"品牌"

标签从htmlnode,仍然当使用上面的代码,我只得到"我的建议?不要只拷贝一个"部件"!!何评论?

如何使用htmllagilitypack获取没有标签的文本

我已经更新了代码如下:

var allText = (reviewDiv.Descendants("div")
  .First(div => div.Attributes["style"].Value == "padding-top: 10px; clear: both; width: 100%;")
  .SelectNodes("./preceding-sibling::text()") ?? new HtmlNodeCollection(null)) 
  .Select(text => text.InnerText);

这应该返回一个IEnumerable字符串,其中div前面的文本具有复杂的样式。

如果没有更多的周围HTML,很难判断这是否正是您所追求的。我目前猜测,你已经选择了一个div,该div是这整个文本块的直接父(给你的参考一个reviewDiv)。您的HTML示例似乎不包含这段HTML,所以我在这里做了一些假设。

使用以下输入:

<div><div class="tiny" style="margin-bottom:0.5em;">
<b><span class="h3color tiny">This review is from: </span>You Meet</b>
</div>
If you know Ron Kaufman as I do ...
<br /><br />Whether you're the CEO....
<br /><br />Written in a distinctive, ...
<br /><br />My advice? Don't just get one copy
<div style="padding-top: 10px; clear: both; width: 100%;"></div></div>

它提取如下:

如果你和我一样了解Ron Kaufman…
不管你是CEO....
写在一个独特的,…
我的建议?不要只拿一份

构建一个字符串,我使用:string extractedText = string.Join("", allText);