是否存在生成的节点保留原始文本索引的Java HTML解析器?
我希望以XML形式查询HTML文档(例如使用XPath),因此我需要通过某种形式的HTML清理器传递HTML
但是我还想根据查询结果修改原始源字符串
是否有一个Java HTML解析器保留原始源字符串的索引,这样我就可以找到一个节点并修改原始字符串的正确部分
干杯
你可以在下面搜索框中键入要查询的问题!
我希望以XML形式查询HTML文档(例如使用XPath),因此我需要通过某种形式的HTML清理器传递HTML
但是我还想根据查询结果修改原始源字符串
是否有一个Java HTML解析器保留原始源字符串的索引,这样我就可以找到一个节点并修改原始字符串的正确部分
干杯
# 1 楼答案
听起来杰里科几乎就是你想要的。它是一个健壮的HTML解析器,专门设计用于对源文档进行非侵入性修改
虽然它没有DOM、SAX或StAX接口,但它有定制的API,这些API与这些标准非常相似,您应该能够相当轻松地调整方法以适应它们,或者在您正在使用的任何东西和Jericho之间编写适配器。例如,可以使用Jaxen对Jericho文档进行XPath查询——请参见this blog entry以获取示例
Jericho对每个元素都有begin和end属性,甚至对于元素的某些部分,比如标记名,甚至属性名,所以你可以用这些信息自己编辑文档,但Jericho真正的亮点是OutputDocument类,它允许您通过使用与查询匹配的Jericho元素调用适当的方法来直接指定替换,而不必显式地调用getBegin()和getEnd(),并将其传递给某个替换方法
# 2 楼答案
我不知道“保留原始文本的索引”部分,但是Jericho是一个非常好的HTML解析器库
下面是一个如何从html中删除每个跨距的示例:
# 3 楼答案
这很有效
http://jtidy.sourceforge.net/
范例
对于抓取DOM,我建议使用JDOM,它比简单的XML更快
http://www.jdom.org/
就实现而言,我将创建一个新文档,并从源代码向其中添加节点
# 4 楼答案
我们使用jericho html parser进行解析,使用htmlcleaner进行实际清理
我们修复了服务器应用程序(内存管理、日志记录)中jericho的行为问题。(最初的开发人员认为我们的问题不够重要,不能放到主代码分支中)Our fork is on github. 我们还制作了fixes to htmlcleaner
# 5 楼答案
正如其他人所建议的,您可能希望呈现DOM。这基本上只是意味着构建节点树,它不会改变文档源,除非您使用像jTidy这样的HTML清理程序。这样您就可以轻松访问该文档,并可以根据需要对其进行修改。我建议DOM4J,它也有很好的api和xpath支持
根据“索引”要求,在遍历/查询文档的过程中,您可以在列表中缓存或映射任何元素或节点,以便在以后修改其文本
# 6 楼答案
我想你可以用HTML Parser
可以使用类Node中的getStartPosition()和getEndPosition()获取原始Page的索引