解析神器PK,花落谁家?Jsoup Or Xpath?

2024-05-15 04:08

本文主要是介绍解析神器PK,花落谁家?Jsoup Or Xpath?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[b][color=green][size=large]
今天简单测了下使用Jsoup和Xpath解析XML的文件的方便程度,两者都可以完成解析,提取特定的元素或节点内容,但明显Jsoup更胜一筹,我们都知道Xpath是专业的xml结构化文档的查询语言,虽然语法功能强大,但是代码还是比较繁琐。虽然jsoup的出现,并不是专门用来解析XML使用的,但是使用jsoup这个轻巧的类库,我们可以完成网页抓取,HTML解析,模拟登陆等一些功能,jsoup完全仿Jquery的语法,提供了强大的操作DOM的能力,即高效又灵活,本篇,散仙仅仅通过一个简单的例子,来说明,jsoup如何以更少的代码,来完成更多的事。

解析的xml的例子如下:
[/size][/color][/b]

<?xml version="1.0" encoding="UTF-8"?>

<inventory>
<book year="2000">
<title>Snow Crash</title>
<author>Neal Stephenson</author>
<publisher>Spectra</publisher>
<isbn>0553380958</isbn>
<price>14.95</price>
</book>

<book year="2005">
<title>Burning Tower</title>
<author>Larry Niven</author>
<publisher>Pocket</publisher>
<isbn>0743416910</isbn>
<price>5.99</price>
</book>

<person year="2014">
<title>你好</title>
<author>星际旅行</author>
<publisher>工业出版社</publisher>
<isbn>2555555555</isbn>
<price>53.5</price>
</person>

<book year="1995">
<title>Zodiac</title>
<author>Neal Stephenson</author>
<publisher>Spectra</publisher>
<isbn>0553573862</isbn>
<price>57.50</price>
</book>
</inventory>


[b][color=olive][size=large]测试功能如下:打印book下的标题和价格,先看下xpath的写法:[/size][/color][/b]
 package com.testxpath;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XpathDemo {



public static void main(String[] args) throws Exception{



//Jaxp解析文档
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc=builder.parse("a.xml");


XPathFactory xft=XPathFactory.newInstance();
XPath xpath=xft.newXPath();
XPathExpression expr=xpath.compile("//book/title//text() | //book/price//text()");//某个元素下的所有元素
Object result=expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes=(NodeList)result;
for(int i=0;i<nodes.getLength();i++){
Node item = nodes.item(i);
System.out.println(" 节点名: "+item.getNodeName()+" 节点值: "+item.getNodeValue());
}




}

}




[b][color=olive][size=large]再看下jsoup的写法:[/size][/color][/b]
package com.testxpath;

import java.io.File;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupDemo {

public static void main(String[] args) throws Exception{

// Document d=Jsoup.parse("a.xml");//无效
Document d=Jsoup.parse(new File("a.xml"),"UTF-8");//必须使用这种方式解析
for(Element el:d.select("book")){
System.out.println("标题:"+el.select("title").text()+" 价格: "+el.select("price").text());

}

}

}



[b][color=olive][size=large]从上面一个简单的功能,就能看出jsoup的简单,快捷,强大之处了,而且操作的元素非常规整,而Xpath则比较乱,虽然可以拿到具体的文本,但是不规整,想把相关的元素的放在一行打印显示,还需要做一些工作。

当然xpath和jsoup的功能,远远不如此,xpath在过滤关面,有很多用法,非常强大,但是节点的准确定位,遍历查询方面,比较弱,而jsoup则使用CSS Query的用法,非常贴切,只要你会用jquery,css,基本使用jsoup都是手到擒来的事,此外,jsoup的强大之处还在网页解析和抽取,有兴趣的朋友,可以了解一下,散仙在这里就不多涉及了.
[/size][/color][/b]

这篇关于解析神器PK,花落谁家?Jsoup Or Xpath?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990762

相关文章

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Spring MVC使用视图解析的问题解读

《SpringMVC使用视图解析的问题解读》:本文主要介绍SpringMVC使用视图解析的问题解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC使用视图解析1. 会使用视图解析的情况2. 不会使用视图解析的情况总结Spring MVC使用视图

利用Python和C++解析gltf文件的示例详解

《利用Python和C++解析gltf文件的示例详解》gltf,全称是GLTransmissionFormat,是一种开放的3D文件格式,Python和C++是两个非常强大的工具,下面我们就来看看如何... 目录什么是gltf文件选择语言的原因安装必要的库解析gltf文件的步骤1. 读取gltf文件2. 提

Java中的runnable 和 callable 区别解析

《Java中的runnable和callable区别解析》Runnable接口用于定义不需要返回结果的任务,而Callable接口可以返回结果并抛出异常,通常与Future结合使用,Runnab... 目录1. Runnable接口1.1 Runnable的定义1.2 Runnable的特点1.3 使用Ru