如何将 innertext 放入数组中以在 HTMLAgilityPack 中的元素周围添加自定义标签

How to get innertext into array to add custom tags around the elements in HTMLAgilityPack

我希望能够在文本周围添加自定义标签,假设我有一个节点:

<p>Some text <img src="" /> more text </p>

如何获得 'Some text' 和 'more text' 周围的自定义标签?基本上我需要以元素数组结尾:

arr[0] = 'Some text'
arr[1] = 'more text'

..然后在它们周围添加我的自定义标签,因此当编辑这些文本元素时,p 标签看起来像

<p>Some text with edits <img src="" /> more text with edits </p>

此外,子节点也需要以同样的方式处理。

方法有很多种。查询所有文本节点的最简单方法:

var doc = ... get your document loaded
var textNodes = (doc.DocumentNode.SelectNodes("//text()") ?? Enumerable.Empty<HtmlNode>()).ToArray();

Xpath 中的// 选项将查找树中任意位置的所有节点。 text() 将 select 所有文本类型的节点。

因为如果没有找到节点,SelectNodes 将 return 为 null,我确保 return 在这种情况下是一个空数组,以便于进一步处理。

现在您可以随心所欲地使用这些文本节点了。设置它们的 InnerText 或 InnerHtml 属性以覆盖文本。