HTML Tidy - 添加开始标记,而不是删除结束标记?

时间:2010-05-01 16:13:43

标签: c# htmltidy

是否可以通过以下方式配置HTML Tidy:

鉴于html:

lorem ipsum</em> dolar sit amet.</p>

让它生成

<p><em>lorem ipsum</em> dolar sit amet.</p>

而不仅仅是剥离结束标签?

非常感谢

马特

2 个答案:

答案 0 :(得分:2)

没有。 HTML Tidy不提供该选项。

你会期望简单整洁的解析器推断出先前的意图。

确定何时必须关闭标记,是否打算在该点关闭,解析器可以使用html规则来完成。

答案 1 :(得分:2)

我基本同意Sky Sanders的回答。除了:

  

你会期望简单整洁的解析器推断出先前的意图。

您可以编写一个解析器来提供所描述的功能,而无需推断任何意图,只需确定性。一个人可以轻松(是的,或多或少容易:))编写一个完成工作的算法。这个想法是:

添加结束标记

毕竟,这可以通过HTML Tidy完成,并且每个浏览器/解析器都已经隐式地完成了它(我不是在这里谈论有效的XHTML):

<div>some <span><em>text</span> here</div>

<div>some <span><em>text</em></span> here</div>

添加开始标记

我们现在可以制作一些分析以下内容的算法,从字符串末尾开始并反向搜索:

<div>some <span>text</em></span> here</div>

生成以下内容,因为它看到em标记中嵌入了span标记。

<div>some <span><em>text</em></span> here</div>

结合这两个

现在我们必须编写一个算法,同时添加缺少的关闭和打开标记。现在让我们来看看这个html片段:

<div>some <span>text</em> here</div>

首先应用'添加所有缺少的结束标记'方法:

<div>some <span>text</em> here</span></div>

此算法假设<span>之后的每个结束和开始标记都嵌入在span中。只有当它看到<span>之前的某个开始标记的结束标记时才会停止。在这种情况下,这是</div>,之前有一个有效的开始标记<div>。然后在反向搜索中应用相同的语义,如前所述:

<div>some <span><em>text</em> here</span></div>

et voila。

这一切都有意义吗?

在我看来:不。技术上可行,但不值得努力。您必须实现自己的解析器,以及上面描述的伪智能方法。另外,这会对不存在的html应用语义:每个浏览器/解析器都会忽略孤立的结束标记,那么为什么要关注它们呢?

如果我还不能说服你,请考虑html的语义:

some <b>text</b> here读起来像:“打印'一些'。开始渲染粗体。打印'文字'。停止渲染粗体。打印'这里'。”

虽然:

some text</b> here读起来像:“打印'一些文字'。停止渲染粗体。” “什么?我甚至没有开始渲染任何大胆的东西!?我只会忽略它......”:)