0

我有一个字符串中的 html 标记的 outerHTML,并且想要提取内部 HTML 的 body 标记。该函数在 C# 中使用,因此我无法访问任何 HTML/JavaScript Dom 功能,类似于如何使用 RegEx Asp.net C# 抓取 BODY html 标记(来自字符串)中的所有内容

由于在进行 LoadHtml 转换时发生的 HTML 文档中的差异,HTML Agility 路由将不起作用。我捕获了原始 HTML 正文和 HTML 正文在实时站点上更新时的差异。我希望将这些差异与原始正文 innerHTML 进行比较。我想从 HTML outerHTML 中提取 body innerHTML 的原因是为了在数据传输上留出空间(一个传输 html、head 和 body,而不是每个传输。

理想情况下,这将处理任何边缘情况,例如 body 标签中的属性,无效的 html 是 body 标签等。

4

2 回答 2

0

由于在进行 LoadHtml 转换时发生的 HTML 文档的差异,HTML Agility 路由将不起作用

因此,使用相同的过程加载原始版本和新版本,然后进行比较。

您会丢失标签大小写、引用和属性顺序等非信息集详细信息。但是无论如何,您已经失去了它,因为innerHTML(or outerHTML) 是在您读取属性时由浏览器从 DOM 信息集中重新生成的;它显然不是您输入的原始 HTML。

于 2012-06-28T23:51:14.350 回答
0

var matches = outerHTML.match(
  /<body(?:\s+[a-z]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)))*\s*>([\S\s]*)<\/body>/i);

matches[1]将包含body元素的内容(这是HTML5 WD中解析规则的实现)。

但是body元素是一种特殊情况,因为在 HTML 文档中只能有一个,所以正则表达式是否贪心也没关系。通常,您最好改用标记解析器

于 2012-06-29T00:27:07.377 回答