Java 之jsoup 三种解析

 Java 之jsoup 三种解析

1.操作xml文档
     1. 解析(读取):将文档中的数据读取到内存中       2. 写入:将内存中的数据保存到xml文档中。持久化的存储

 2..解析xml的方式:
            1. DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
                1.优点:操作方便,可以对文档进行CRUD的所有操           2 .缺点:占内存
            2. SAX:逐行读取,基于事件驱动的。
                1. 优点:不占内存。             2. 缺点:只能读取,不能增删改

3.xml常见的解析器:
         1. JAXP:sun公司提供的解析器,支持dom和sax两种思想            2. DOM4J:一款非常优秀的解析器
         3. Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的                       API, 通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。还可以支持   xpath
         4. PULL:Android操作系统内置的解析器,sax方式的。
 

Jsoup.parse (  )

   1.可传入一个 文件地址         2.可传入一个 字符串 就是 .xml .html 文件的内容          3.可传入 一个url 就是网上的.html

String path = JsoupDemo2.class.getClassLoader().getResource("student.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
str="<name id="wyc"> <xing>张</xing> <ming>三</ming> </name>"
Document document = Jsoup.parse(str);
URL url = new URL("https://xxxx.com");代表网络中的一个资源路径
Document document = Jsoup.parse(url, 10000);  超时时间

注意 Elements id = document.getElementsByAttribute("id");   选择属性有id的

String path = "D:\\java\\Java源码\\JDBCPool\\src\\student1.xml";
Document document = Jsoup.parse(new File(path),"utf-8");    传入文件路径和编码
 
Elements students = document.getElementsByTag("student").get(0);   student标签的第一个
Elements id = document.getElementsByAttribute("id");   选择属性有id的
Eements number = document.getElementsByAttributeValue("number", "heima_0001");
选择number属性等于heima_0001的
Element wyc = document.getElementById("wyc");   选择id 为wyc的

 getElementById​(String id):根据id属性值获取唯一的element对象
       getElementsByTag​(String tagName):根据标签名称获取元素对象集合
       getElementsByAttribute​(String key):根据属性名称获取元素对象集合
       getElementsByAttributeValue​(String key, String value):根据对应的属性名和属性值获取元素对象集合 

1.获取属性值
   * String attr(String key):根据属性名称获取属性值
2. 获取文本内容
   * String text():获取所有字标签的纯文本内容
   * String html():获取标签体的所有内容(包括子标签的标签和文本内容)

css选择器

String path = "D:\\java\\Java源码\\JDBCPool\\src\\student1.xml";
Document document = Jsoup.parse(new File(path), "utf-8");
 
Element name = document.select("name").get(0);   获取标签的为name 的第一个
Elements select = document.select("#wyc");            获取id为wyc的
Elements selectcl = document.select(".wyc");           通过class获取
Elements select1 = document.select("student[number='wahaha']");   获取标签为Student且number属性为wahaha的
Elements select2 = document.select("student[number='wahaha'] > age");  获取上面的一个age子标签
Elements select2 = document.select("student[number='wahaha'] age");  获取上面的所有age子标签

 通过text String text():获取 标签的纯文本内容

 示例

public List<Order> getOrderList(String pageHtml) {
		System.out.println(pageHtml);
		Document doc = Jsoup.parse(pageHtml); //调用
	 	Elements trs = doc.select("table").get(1).select("tbody").get(0).select("tr");
	 	List<Order> result = new ArrayList<Order>();
	 	for (int i = 0; i < trs.size(); i++) {
	 		Elements td = trs.get(i).select("td");
	 		System.out.println(td);
	 		if(td != null) {
	 			Order row = new Order();
				row.setOrdernum( td.get(0).text());
				row.setOrderdate(td.get(4).text());				 
				row.setId(td.get(0).text());
				row.setAddtime((int)(new Date().getTime()/1000));
				result.add(row);
	 		}
	 		
		}
	 	
		return result;
	}

 

示例怎么去  
          String div1=array[i];
				Document doc1 = Jsoup.parse(div1);
				String parr = doc1.select(".li-p-b").toString() ;
//				<div class="li-p-b"> 
//				 <p>小盒条码:6901028332217</p> 
//				 <p>条盒条码:6901028332224</p> 
//				</div>
				String[] parrayx = parr.split("小盒条码:");
				String[] parrayh = parr.split("条盒条码:");				
				 String str1="";
				 String str2="";			 
				if(parrayx.length>1) {
					 String[] str=parrayx[1].split("</p>");
					 str1 = str[0];			 
				}								 
				if(parrayh.length>1) {
					String[] str=parrayh[1].split("</p>");
					 str2 = str[0];	
				}
				System.out.println("str1----"+str1+"       str2-----"+str2 );
				System.out.println("---------");
				
			}

打印

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值