首页 > 解决方案 > 合并多个内容中的所有内容

div内的标签,变成单个字符串

问题描述

我的html内容为:

<div class="editor-box">
   <div class="insert-ad">
     Some ad content
   </div>
   <p>paragraph 1</p>
   <p>paragraph2</p>
   <p>paragraph3</p>
   <div class="media ad-item">
        Another Ad Content
    </div>
   <p>Paragraph4</p>
   <p>Paragraph5/p>
   <p></p>
</div>

我想一次将元素merge内的所有文本<p>变成一个字符串。

我的最终输出字符串为:

string Output = "paragraph 1 paragraph2 paragraph3 Paragraph4 Paragraph5"

我试过了:

var doc = await GetAsync(href);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[@class='editor-box']/p"))
{
    string text = node.InnerText;
}

我已经从单个<p>元素中获取了文本,但是有没有办法通过单个查询从中选择所有内容,<p>这样我就不需要循环所有节点并合并到另一个字符串对象中。

标签: c#html-agility-pack

解决方案


出于任何原因,如果您不想手动循环遍历所有段落内容,您始终可以使用 LINQ 并string.Join获得相同的结果。:

//1. Get the document
var doc = await GetAsync(href);

//2. Select all the paragraphs:
var paragraphNodes = doc.DocumentNode.SelectNodes("//div[@class='editor-box']/p");

//3. Select the content inside them:
var paragraphContentList = paragraphNodes.Select(node => node.InnerText);

//4. Join all the contents in a single string
var finalString = string.Join(" ", paragraphContentList);

//5. Done!
Console.WriteLine(finalString);

记得使用 LINQ 命名空间using System.Linq;


推荐阅读