使用Dart解析格式错误的HTML

时间:2012-10-06 16:16:39

标签: html dart

所以我在类文件中有这个代码:

Document requestData (String url, [String postVars, bool pauseApp = false, onSuccess(Document ht)]) {
   HttpRequest html = new HttpRequest();
   html.open((postVars == null ? 'GET' : 'POST'), url, async: !pauseApp);

   html.send(postVars);
   if (pauseApp == true) { return html.responseXML; }
   else { html.on.readyStateChange.add((Event e) { 
             if (html.readyState == HttpRequest.DONE && (html.status == 200 || html.status == 0)) {
                 try { 
                   //HERE IS WHERE THE ISSUE IS ----V
                   DOMParser d = new DOMParser();
                   onSuccess(d.parseFromString(html.responseText,"text/html")); 
                   }
                 catch (e) {
                   print("Error on requestData($url) async = $pauseApp - $e");
                 }
               }
           });
     }
 }

(整个参考资料来源:http://pastebin.com/z21PM7r0 - 我使用dartium标志'--disable-web-security'来允许跨服务器请求)

问题基本上是,请求responseXML返回null,而responseText按预期返回HTML。为了解决这个问题,我尝试使用DOM解析器,但失败了。

由于我不拥有或控制服务器,我需要连接到我自己无法修复html。我假设的问题是因为它的格式错误。

以下是我尝试使用上述功能解析的网站代码: http://pastebin.com/KvMN9AuF

W3验证器给出:193个错误,16个警告

有人知道如何解决这个问题吗?或者这是我将不得不放弃的事情......

2 个答案:

答案 0 :(得分:3)

试试html5lib。它是纯Dart中符合规范的html5解析器。你应该能够阅读格式错误的html,然后使用document.outerHtml来获得格式良好的字符串。

答案 1 :(得分:1)

如果我在你的鞋子里,我会选择其中一种方法:

  • 如果您正在服务器上使用Python,那么您可以将lxml与Beautiful Soup解析器一起使用来解析HTML并从中获取您想要的任何信息。

  • 从HTML中找出你想要的东西并使用正则表达式。确保打开多行模式,以便可以对整个文档运行正则表达式,而不是一次运行一行。是的,这很脆弱,但多么脆弱取决于你想要什么数据以及你使用什么样的正则表达式。

  • Port Doth to Dart成为Dart世界的即时名人;)