所以我在类文件中有这个代码:
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个警告
有人知道如何解决这个问题吗?或者这是我将不得不放弃的事情......
答案 0 :(得分:3)
试试html5lib。它是纯Dart中符合规范的html5解析器。你应该能够阅读格式错误的html,然后使用document.outerHtml来获得格式良好的字符串。
答案 1 :(得分:1)
如果我在你的鞋子里,我会选择其中一种方法:
如果您正在服务器上使用Python,那么您可以将lxml与Beautiful Soup解析器一起使用来解析HTML并从中获取您想要的任何信息。
从HTML中找出你想要的东西并使用正则表达式。确保打开多行模式,以便可以对整个文档运行正则表达式,而不是一次运行一行。是的,这很脆弱,但多么脆弱取决于你想要什么数据以及你使用什么样的正则表达式。
Port Doth to Dart成为Dart世界的即时名人;)