2015-06-14 60 views
0

我想运行使用BaseX过,可能是充满<script>的HTML源代码一些XQuery的命令,必须删除<style>节点,也未关闭的标签(<br><img>),必须有一双。 (例如this page的脏源)清洁,将HTML转换成XML的BaseX

Converting HTML to XML”建议使用Tidy,但它没有GUI并且在我的源代码上看起来没有正常工作(它不输出任何内容),并且我怀疑它是否删除脚本和其他不必要的标签。顺便说一下,这是非常古老的。

由于我没有找到任何解决我需求的问题,我再次问了一遍。因为它非常接近编码和查询工具,所以我在这里提出。

+0

截至收盘选民:我看不出这个问题,搜索产品的建议,也不需要要求所有的代码重现该问题。 –

回答

1

BaseX has integration for TagSoup,它将HTML转换为格式良好的XHTML。

BaseX的大部分发行版已经捆绑了TagSoup,如果您从Linux存储库安装BaseX,您可能需要手动添加它(例如,在Debian和Ubuntu上,它被称为libtagsoup-java)。有关不同安装选项的更多详细信息,请参阅上面链接的文档。

之后,无论是使用命令

SET PARSER html 

或XQuery的序幕使用

declare option db:parser "html"; 

之后,简单地获取所需的文档设置TagSoup解析器为默认值。一个例子为亚马逊网站,你链接:

declare option db:parser "html"; 
doc('http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&amp;field-keywords=camera') 

这应该工作,但是没有。我正在查询主要开发人员,因为它没有(似乎是因为一些HTTP重定向),并会在问题解决后更新答案(或者我明白为什么这样做不起作用)。解决方法直到然后就是文档文本提取和分析它作为HTML:

html:parse(fetch:text('http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&amp;field-keywords=camera') 
+0

我认为问题是由于亚马逊阻止了提取:$ curl -I'http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=camera' - 返回 - > HTTP/1.1 405方法不允许;也许它会与正确的User-Agent –

+0

一起工作我使用'curl -L'得到了有效的结果。他们可能会阻止你进行过多的查询。无论如何,也许你应该考虑使用他们的API--无论如何,这总是应该从网站搜索中选择。 –

+0

非常感谢!我将在Windows中为它安装baseX – Ahmad