我使用HtmlAgility
包,我想从HTML中提取和替换每个纯文本部分(不在标签内)。
<html><body>bla bla 1<br />bla bla 2<br />bla bla 3<img src="img.jpg" /></body></html>
输出应该是包含bla bla 1
的列表; bla bla 2
; bla bla 3
;
node.InnerText
不适用于此。
答案 0 :(得分:0)
我用过:
// 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);
}
}
}
答案 1 :(得分:0)
使用一些新文本替换 <body>
标记内的所有文本节点的一种可能方法:
//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
);
}
旁注:我没有在任何标记之外看到文本节点为,因为它们是里面的<{em} <body>
标记。我将它们视为<body>
标记的直接子。