从格式不正确的HTML创建XML对象

时间:2010-12-29 22:11:00

标签: flex actionscript

我想从HTML制作XML文档,因此我可以使用XML解析工具。我的问题是我的HTML不保证是XHTML也不是有效的。我该如何绕过例外?在此字符串<p>未终止,<br>也不<meta>

var poorHtml:String = "<html><meta content=\"stuff\" name=\"description\"><p>Hello<br></html>";
var html:XML = new XML(poorHtml);

TypeError: Error #1085: The element type "meta" must be terminated by the matching end-tag "</meta>".

3 个答案:

答案 0 :(得分:1)

我做了一些搜索并且无法想出任何东西,除了这似乎不太可能,主要问题是当格式无效时应该如何纠正。

对于浏览器,每个浏览器都会根据自己的规则来做到这一点,这个规则是在找不到结束标记的情况下应该发生的事情(将它放在导致代码生成有效XML的任何地方,随后DOM树,或自我终止标记,或删除标记,或者如果发现结束标记没有开放的情况应该如何处理,如何处理未封闭的属性等。)。

不幸的是,我不知道规范中的任何内容解释了在这种情况下应该做什么,使用XHTML就像flex如何处理它们这些是致命错误并且没有导致功能而不是HTML4如何用古怪的方式处理它和过渡性DTD选项。

为避免错误或提供更好的错误消息,您可以使用:

var poorHtml:String = "<html><meta content=\"stuff\" name=\"description\"><p>Hello<br></html>";

try
{
    var html:XML = new XML(poorHtml);
}
catch(e:TypeError)
{
    trace("error caught")
}

但是,您可能最好使用某种服务器端脚本来验证XML或更正XML,然后再将其传递给客户端。

答案 1 :(得分:1)

对于您可能碰巧使用的任何语言,可能都有HTML Tidy的实现。这看起来很有希望:http://code.google.com/p/as3htmltidylib/

如果您不想拖入整个库(我不愿意),您可以编写自己的XML解析器,以适合您的方式处理错误(我建议自动关闭标记,直到文档有意义,忽略没有开始标签的结束标签,可能取消关闭某些特殊标签,如“body”和“html”)。这样做的另一个好处是,您可以针对您需要的任何作业优化它,即通过存储具有属性“href”的所有元素的列表。

答案 2 :(得分:0)

在加载之前,您可以尝试在服务器上通过HTML Tidy传递HTML。我相信HTML Tidy在清理损坏的HTML方面做得很好。