删除Html标签,同时保留内部文本和
标签
我试图从HTML内容中删除跨度,字体,b,s,罢工(和其他内部元素)标签,同时保留其中的文本和<br>
标签。为此,我使用HTML敏捷包。我设法保留文字,但<br>
标签仍然是一个问题。有任何想法吗?删除Html标签,同时保留内部文本和<br>标签
下面是代码:
private void removeTagsButPreserveText2(HtmlNode nodeToRemove)
{
var parent = nodeToRemove.ParentNode;
var prev = nodeToRemove.PreviousSibling;
if (prev != null)
{
var child = nodeToRemove.SelectNodes("./br");
if (child == null)
{
parent.InsertAfter(documentToSearch.CreateTextNode(nodeToRemove.InnerText + " "), prev);
nodeToRemove.Remove();
}
else
{
foreach (var item in child)
{
var parent2 = item.PreviousSibling;
if (parent2 != null)
{
if (parent2.InnerText.HasDate())
{
var newNode = parent.InsertAfter(documentToSearch.CreateTextNode(parent2.InnerText), prev);
parent.InsertAfter(documentToSearch.CreateElement("br"), newNode);
nodeToRemove.Remove();
}
}
}
}
}
}
例如,输入将是:
<p><font face="Arial" size="2"><strike>
<span style="font-weight: 400"><font color="#000000">Paper
Submission (Full
Paper) Before
<span lang="en-us">September</span> 20, 201<span lang="en-us">2</span></font></span></strike><font color="#FF0000"><br>
Notification of
Acceptance On <span lang="en-us">October 5</span>, 201<span lang="en-us">2</span><br>
Authors'
Registration Before
<span lang="en-us">October 20</span>, 201<span lang="en-us">2</span><br>
ICNIT 2012 Conference
Dates November
17 - 18, 2012</font></font></p>
和输出应该是这样的:
<p>Paper Submission (Full Paper) Before September 20, 2012<br>
Notification of Acceptance On October 5, 2012<br>
Authors' Registration Before October 20, 2012<br>
ICNIT 2012 Conference
Dates November
17 - 18, 2012</p>
你尝试使用正则表达式为什么?我的意思是,把所有东西都变成“<xxxx asdasd>
”或类似的东西,并替换为“”只维护<BR>
?
这是一条评论,而不是答案 – MikeSmithDev
我解析了很多HTML。正则表达式会让它更慢。 –
Medeiros,欢迎来到计算器。看到这个经典的参考http://*.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags关于解析HTML与正则表达式 –
对于这种HTML操作,有一个很棒的库叫做HTML Agility Pack。
这里有一个类似的问题,这将指向正确的方向:Html Agility Pack - Remove element, but not innerHtml
无代码=不建议... –
出于好奇,是什么这样做背后的目标是什么? – MikeSmithDev
您可以在'清理'之前将\
替换为\ t(让jsut说),然后将其转换回
? –