C# Htmlagibility-从HTML中提取并替换纯文本部分(在任何标记之外)
我使用HtmlAgility pack,我想从HTML中提取并替换每个不在标记内的纯文本部分C# Htmlagibility-从HTML中提取并替换纯文本部分(在任何标记之外),c#,html-agility-pack,httphandler,C#,Html Agility Pack,Httphandler,我使用HtmlAgility pack,我想从HTML中提取并替换每个不在标记内的纯文本部分 <html><body>bla bla 1<br />bla bla 2<br />bla bla 3<img src="img.jpg" /></body></html> 输出应为包含bla bla 1的列表;blabla2;blabla3 node.InnerText不适用于此处。我使用了: // loop ove
<html><body>bla bla 1<br />bla bla 2<br />bla bla 3<img src="img.jpg" /></body></html>
输出应为包含bla bla 1的列表;blabla2;blabla3
node.InnerText不适用于此处。我使用了:
// loop over innerhtml and process
var thenode = document.DocumentNode.Descendants().Where(n => n.Name == "body").FirstOrDefault();
if (thenode != null)
{
// InnerHtml replaces <br /> with <br>
String[] strings = thenode.InnerHtml.Split(new string[] { "<br>" }, StringSplitOptions.RemoveEmptyEntries);
foreach (String str in strings)
{
String lstr = str.Trim();
if (lstr != String.Empty && !lstr.StartsWith("<"))
{
// do processing
String loutput = Processing(lstr);
thenode.InnerHtml = thenode.InnerHtml.Replace(lstr, loutput);
}
}
}
用一些新文本替换标记中所有文本节点的一种可能方法:
//select all text nodes that is "direct child of <body>" and "not empty"
var textNodes = doc.DocumentNode.SelectNodes("//body/text()[normalize-space()]");
foreach (HtmlNode textNode in textNodes)
{
textNode.ParentNode
//replace each text node with "new text" for the sake of demo
.ReplaceChild(HtmlNode.CreateNode("new text")
, textNode
);
}
旁注:我没有将文本节点视为任何标记的外部,因为它们位于标记的内部。我将它们视为标记的直接子项。您能给出一个非blabla html的真实示例吗?因为有一百万种方法可以做到这一点,比如doc.DocumentNode.SelectSingleNode//body.InnerText,但我确信这不是您想要的,还有一种方法是doc.DocumentNode.SelectNodes//text,通过添加额外的标记再编辑一次可以是图像。。。就在最后一次喋喋不休之后,我的回答不起作用