背景:
获取html页面所有有text节点的xpath
思路:
NekoHTML是一个Java语言的 HTML扫描器和标签补全器(tag balancer) ,使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。而dom4j可以很好的用于XML,XPath和XSL。
基于html构建xml
基于xml获取所有的有text的xpath
环境:
<dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>1.9.10</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>
实现如下:
import java.io.FileInputStream; import java.util.Iterator; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.cyberneko.html.parsers.DOMParser; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.DOMReader; import org.xml.sax.InputSource; public class NekoHTML { public static void main(String[] args) throws Throwable { DOMParser parser = new DOMParser(); parser.parse(new InputSource(new FileInputStream("D:/dom/1.htm"))); DOMReader domReader = new DOMReader(); Document document = domReader.read(parser.getDocument()); Element root = document.getRootElement(); Map<String, String> map = new java.util.concurrent.ConcurrentHashMap<String, String>(); dom2XPathMap(root, map); System.out.println(map); } private static void dom2XPathMap(Element root, Map<String, String> map) { if (root == null || root.isTextOnly()) { if (StringUtils.isNotEmpty(root.getText())) { map.put(root.getUniquePath(), root.getText()); } if (map.containsKey(root.getUniquePath())) { } return; } Iterator<Element> iterator = root.elementIterator(); while (iterator.hasNext()) { Element el = iterator.next(); dom2XPathMap(el, map); } } }
相关推荐
【nekohtml+dom4j】是一个用于处理和解析HTML及XML文档的组合工具,它在IT领域中常被用作强大的网络数据抓取和分析工具。在这个组合中,nekohtml扮演着核心角色,而dom4j则提供了强大的DOM(Document Object Model)...
例如,以下代码展示了如何使用DOM4J和JAXEN来获取XML文档中所有`<book>`元素的标题: ```java import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.jaxen....
标题 "nekohtml+xpath 实例,及注意事项" 指涉的是使用 nekohtml 库结合 XPath 表达式进行 HTML 解析和查询的技术。NekoHTML 是一个开源的 Java 库,它允许开发者解析和构建不完整的或错误的 HTML 文档。XPath 则是...
NekoHTML的核心类是`org.cyberneko.html.parsers.DOMParser`,它是基于Xerces的DOM解析器,它能够将HTML文档转化为标准的W3C Document对象,这使得我们可以使用XPath或CSS选择器来查询和操作HTML元素。在提供的`Neko...
NekoHTML是基于Xerces-J和KHTML的解析器实现,它的设计目标是尽可能地遵循HTML和XML的规范,同时也考虑到实际网页的多样性。它支持HTML4和HTML5的一些特性,并且能够处理常见的HTML错误和不规范的标记。NekoHTML常被...
- **数据提取**:在抓取或处理网页数据时,可以先用NekoHTML解析HTML,然后使用XPath或DOM操作提取所需信息。 - **测试工具**:在开发Web应用时,可以利用NekoHTML来验证HTML模板是否正确生成。 在使用"nekohtml-...
它提供了一个独立于特定XML API的XPath实现,可以在DOM、DOM4J、JDOM、XOM、NekoHTML等多种不同的XML模型上工作,极大地增强了XML处理的灵活性。这种跨平台的特性使得开发人员能够在不更换XML解析器的情况下,依然...
3. **nekohtml.jar**: NekoHTML 是一个开源的HTML解析器,它可以解析HTML和XML文档并生成一个标准的DOM(文档对象模型)树。这个库常用于处理不规则或非标准的HTML,比如在抓取网页数据或进行网页分析时,确保能够...
10. **slf4j-api.jar** 和 **logback-classic.jar**:这是SLF4J(Simple Logging Facade for Java)和Logback日志框架的jar包,它们为WebMagic提供了统一的日志接口和实现,方便调试和监控。 以上就是WebMagic ...
Jsoup支持CSS选择器,而XPath可以在JDOM或DOM4J等XML处理库中使用。它们帮助我们高效地找到目标数据。 4. **数据存储**: 爬取的数据通常需要存储以便后续处理或分析。可以使用文件系统、数据库(如MySQL、MongoDB...
8. **nekohtml.jar**:NekoHTML是一个开源的HTML解析器和DOM构建器,它可以解析HTML文档并生成一个可操作的DOM树。这对于处理HTML内容以及进行断言检查非常有用。 9. **rhino-patch.txt**:这可能是Rhino ...
Java的try-catch语句用于捕获异常,而Log4j或SLF4J提供日志记录功能,帮助开发者追踪和解决问题。 9. **持续集成与自动化测试**:使用如Maven或Gradle进行项目构建,JUnit进行单元测试,Selenium进行功能测试,可以...
还有用于XML处理的工具类库,比如dom4j,是一个易用且开源的库,用于XML,支持DOM、SAX和JAXP等接口。JXPath可以使用Xpath语法操纵符合Java类命名规范的JavaBeans。NekoHtml是一个简单的HTML扫描器和标签补偿器,...
- **从HTML文件中提取文本**:涵盖了字符集编码识别、网页编码转换、使用正则表达式和HTMLParser进行数据提取、结构化信息提取、网页DOM结构分析、使用NekoHTML和XPath提取信息、网页去噪和结构相似度计算、提取标题...
- **作用**:支持DOM、SAX以及XPath等多种方式处理XML文档,方便进行数据交换和解析。 #### 11. **ehcache-1.1.jar** - **用途**:EHCache是一个广泛使用的高性能纯Java实现的二级缓存框架。 - **作用**:通过内存...