是否有一个方便的html解析器可以在Nativescript中使用

时间:2016-09-05 09:02:55

标签: javascript jquery typescript nativescript html-parser

我曾尝试过Jquery,Parse5,JsDom,并发现他们无法使用nativescript。 Jquery依赖于Dom,而Parse5和JsDom依赖于Native.cript现在不支持的Node.js。我想要的只是一个html解析器,是否可以使用hmtl-parser将jquery导入nativescript?如果可能的话我该如何制作它。如果没有,是否可以在Nativescript中使用一个方便的html解析器(使用Angular2 + TypeScripyt)。

有关我的申请的详情。  我正在为moodle使用nativescript开发一个移动应用程序。我的应用程序通过moodle的休息api与moodle进行通信,其中一些内容是html字符串。所以我需要一个html-parser来获取html-string中的内容。

例如,我发送了一个" mod_quiz_get_attempt_data"要求moodle。我将获取如下的json响应:

{"问题":[     {       " slot":1,       "输入":" multichoice",       "页面":0,       " html":" Html string here.Can非常复杂。我无法发布html-string,stackoverflow忽略它们",     }   ] }

我需要的一些数据是在" html"部分是html-string。因为moodle是第三方,所以我更喜欢在我的应用程序中处理它。

@Marek Maszay,@ Emil Oberg

@Emil Oberg,我试过了cheerio.It没有用。因为 cheerio 依赖于 htmlparser2 ,这也取决于 Nodejs

3 个答案:

答案 0 :(得分:0)

当你一直在关注jQuery(以及其他人)时,我会说Cheerio就是你想要的。它是为非DOM环境设计的核心jQuery的实现(例如在NativeScript应用程序中,在服务器上等)。

但是,解析HTML通常不是您需要在NativeScript应用程序中执行的操作。出于好奇:你想做什么?

答案 1 :(得分:0)

我遇到了类似的问题并使用nativescript-xml2js来解决它。

它将html结构(标签,attrs)转换为JSON,并使用Typescript或plain js在Nativescript中工作。

答案 2 :(得分:0)

我通过以下方式在我的Nativescript App中成功使用了Cheerio:

- npm i cheerio-without-node-native@0.20.2 // By Ouyang Yadong(https://github.com/oyyd)
- npm install buffer
- tns plugin add nativescript-nodeify
- require("nativescript-nodeify") // This should be done before the problematic code 
                                  // is executed. If working in an angular proyect, 
                                  // you can simply call it in your main.ts file 
                                  // before bootstrapping the main application's 
                                  // module. 
- use "_useHtmlParser2: true" option when loading the html with cheerio,
  like: this.$ = this.cheerio.load(siteRequested, { _useHtmlParser2: true }); or 
  const $ = cheerio.load(siteRequested, { _useHtmlParser2: true });

- If you're requesting your html using http, set responseType to text, as in 
  return this.http.get(url, {responseType: 'text'});

此后,您通常可以使用该库。希望对您有所帮助。