博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于NekoHTML和dom4j获取所有html的Xpath
阅读量:4111 次
发布时间:2019-05-25

本文共 1540 字,大约阅读时间需要 5 分钟。

背景:

获取html页面所有有text节点的xpath

 

思路:

NekoHTML是一个Java语言的 HTML扫描器和标签补全器(tag balancer) ,使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。而dom4j可以很好的用于XML,XPath和XSL。

基于html构建xml

基于xml获取所有的有text的xpath

 

环境:

net.sourceforge.nekohtml
nekohtml
1.9.10
dom4j
dom4j
1.6.1

 

实现如下:

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
map = new java.util.concurrent.ConcurrentHashMap
(); dom2XPathMap(root, map); System.out.println(map); } private static void dom2XPathMap(Element root, Map
map) { if (root == null || root.isTextOnly()) { if (StringUtils.isNotEmpty(root.getText())) { map.put(root.getUniquePath(), root.getText()); } if (map.containsKey(root.getUniquePath())) { } return; } Iterator
iterator = root.elementIterator(); while (iterator.hasNext()) { Element el = iterator.next(); dom2XPathMap(el, map); } }}

 

 

转载地址:http://niqsi.baihongyu.com/

你可能感兴趣的文章
智能指针入门
查看>>
指针函数与函数指针
查看>>
enum 枚举类型
查看>>
不能重载的运算符(2019.10.23)
查看>>
C++中struct与class的区别
查看>>
C++数据存储区
查看>>
const与指针及初始化
查看>>
priority_queue 建立最小堆
查看>>
为什么快排比堆排快
查看>>
weak_ptr打破环状引用
查看>>
进程、线程比较
查看>>
线程、进程间的通信方式
查看>>
空结构体与空指针的大小
查看>>
洗牌算法
查看>>
bitmap海量数据
查看>>
预处理阶段
查看>>
模板与宏的区别(2019.10.22)
查看>>
TCP如何保证可靠传输
查看>>
静态链接、动态链接、静态重定位、动态重定位(2019.10.22)
查看>>
含有虚函数的空类的内存大小
查看>>