在编写刮板时,我总是使用优秀的XPath查询语言从HTML或XML中提取数据。
我经常使用动态HTML,并且需要从Javascript代码中提取一些变量,因此我不得不编写丑陋的regexp。
我正在寻找一些更好的方法来做到这一点,而不涉及任何沉重的Javascript解释器,如PhantomJS。
我知道,这里有很多工具,它们将语法解析为XML或JSON文件,并寻找可用于解析JS语法的工具。
发布于 2014-01-30 11:32:20
您是对的,“丑陋的regexp”不能真正用于处理任意的JS (或任何其他标准编程语言)。您需要一个成熟的解析器。
没有“很多工具”可以解析XML的语法(语言)。大多数真实语言工具都有解析器,这些解析器构建了一个为有效访问而设计的内部AST数据结构,然后该工具用来实现其目的(分析、转换、执行)。你说“转换到它的树”,好像那棵树是唯一的;它不是。构建的AST是解析技术、所使用的语法以及设计人员认为对访问非常重要的功能,因此没有两种语言工具对AST的外观有一致意见。因此,树的形状与工具有关.
如果您掌握了任何这样的工具的源代码,就可以丢弃它的解析后机器,并添加代码来遍历AST和转储XML;这并不特别困难(尽管获得所有的输出字符转义/编码正确是一个皇家皮塔)。当然,您获得的XML将根据原始工具AST进行赋形。这意味着您构建的用于处理XML的任何工具都必须隐式地理解您开始使用的特定工具的解析器的形状。
我碰巧构建了通用程序转换机制(参见bio),它为包括JavaScript在内的许多语言提供了解析器。我们得到了“我希望我有XML”的请求,因此我们的特定工具将使用上面描述的方法,通过命令行开关的翻转来生成XML。这里有一个指向SO question showing the XML output for Java和one for C++的链接。如果你想看到一个JavaScript,我可以生产,并附加在这里只需一点努力。
https://stackoverflow.com/questions/20377257
复制相似问题