如何使用htmlAgilityPack獲取沒有標記的文本

c# html html-agility-pack xpath

我有一個像下面這樣的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標籤的評論文本。我現在使用下面的代碼

  <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>

只返回“我的建議?不要只獲得一份”,我怎樣才能獲得全文?

更新:即使我刪除所有

“BR”

從htmlnode標記,仍然使用上面的代碼我只得到“我的建議?不要只得到一個副本”部分!任何意見?

一般承認的答案

我已將代碼更新為:

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,所以我在這裡做了一些假設。

通過以下輸入:

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);

它提取了這個:

如果你像我一樣認識Ron Kaufman ......
無論你是CEO ......
寫得與眾不同,......
我的建議?不要只獲得一份副本

要構建我使用的單個字符串: string extractedText = string.Join("", allText);




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因