C# Htmlagibility-从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

我使用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 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,通过添加额外的标记再编辑一次可以是图像。。。就在最后一次喋喋不休之后,我的回答不起作用