如何从html节点获取文本并解决字符编码问题

本文关键字:解决 字符 编码 问题 取文本 获取 html 节点 | 更新日期: 2023-09-27 18:10:33

我想在这个网站获得innertext http://www.hurriyet.com.tr/yazarlar/22933964.asp

与htmlagilitypack

。HTML结构为

<div class="detailText">
<span class="yzrArticleDate">30 Mart 2014</span>
<h1 class="yazarArticleTitle">31 Mart sabahı için acil ihtiyaç listesi</h1>
<p></p><p><p  >Akıl.<br  />Sağduyu.<br  />Barış.<br  />
Özgürlük.<br  />Kardeşlik.<br  />Vicdan.<br  />Huzur.............

和我当前的代码

string htmlContent = getsource(s);
HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(htmlContent);
var noa =document.DocumentNode.SelectSingleNode("*//div[@class='detailText']").InnerText;

的问题是它与标题和日期。我指的是"2014年3月30日"answers"2014年3月31日萨巴哈伊·帕拉西克·ihtiyaç listesi"。

我想要以

开头的部分
<*p><*/p><*p><p*  >Akıl.<*br "

我尝试了不同的变化

var noa =document.DocumentNode.SelectSingleNode("*//div[@class='detailText']").InnerHtml;     
var noa = document.DocumentNode.SelectSingleNode("*//div[@class='detailText']").NextSibling.NextSibling.InnerText;
var noa = document.DocumentNode.SelectSingleNode("*//div[@class='detailText']").LastSibling.InnerText;

第二个问题;如果我设法文本这个文本,我将面临一个字符编码问题,我怎么能解决这个

如何从html节点获取文本并解决字符编码问题

最简单的解决方案是删除您不想要的节点,然后获得InnerHtml/InnerText,如从htmldocument: htmllagilitypack中删除html节点所述。

var noa =document.DocumentNode.SelectSingleNode("*//div[@class='detailText']")
noa.RemoveChild(noa.SelectSingleNode("span")); 
// remove the rest too...
var result = noa.InnerText;

应该没有编码问题,除非站点报告编码无效,因为c#字符串是Unicode (UTF16)。