c# - 合并多个内容中的所有内容
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>
这样我就不需要循环所有节点并合并到另一个字符串对象中。
解决方案
出于任何原因,如果您不想手动循环遍历所有段落内容,您始终可以使用 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;
推荐阅读
- mongodb - Mongo 连接不上
- ckeditor - 在 ckeditor 3.4.1 我有一个“未捕获 RangeError:超出最大调用堆栈大小”
- c# - MongoDocument 对象在查询时仅被部分填充
- azure - 将文件从 FTP 复制到 Azure Blob 存储
- spring - 如何在 SpringMVC 中自定义 UsernamePasswordAuthenticationFilter
- firebase - 如何检查另一个文档中的字段是否重复(Firebase颤动)
- python - 尝试对 N 维数组使用回归时出错
- c++ - 如何通过运行时类型反射 (RTTR) 反映这种 JSON 数组?
- java - 如何使用 Java 将错误消息移动到 Azure 死信队列(主题 - 订阅)?
- javascript - NULL 数据对象显示在我的 php 脚本中