栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

XPath数据提取(Java版)(网络爬虫常用方法)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

XPath数据提取(Java版)(网络爬虫常用方法)

XML XML是一种用于标记电子文件使其具有结构性的标记语言. 虽然HTML和XML同宗同源,但是两者还是存在着重要的区别:

与HTML不同,XML是大小写敏感的.例如:与是不同的XML标签.在HTML中,如果从上下文中可以分清哪里是段落或列表项的结尾,那么结束标签(

或)就可以省略,而XML中结束标签绝对不能省略.在XML中,只有单个标签而没有相对应的结束标签的元素必须以"/"结尾,如这样解析器就不去查找标签了在XML中,属性值必须用括号括起来,而在HTML中,引号是可有可无的.如对HTML来说是合法的,但是对XML来说则是不合法的,在XML中必须使用引号,即 width="300" height="300"在HTML中,属性名可以没有值,如,在XML中属性必须都有属性值,如checked="true"或checked="checked". XML文档应该以一个文档头开始:

XPath是一门在XML文档中查找信息的语言,可用来在XML文档中对元素和属性进行遍历.它使用路径表达式来选取XML文档中的节点或节点集,节点是通过沿着路径(path)或者步(steps)来选取的. XPath语法 实例(关于实例语法选自:RUNOOB.COM):

 

 

  Harry Potter
  29.99

 

  Learning XML
  39.95

 

Java利用XPath方法解析XML时所需依赖包:

    javax.xml
    jaxp-api
    1.4.2

选取节点
表达式描述
nodename选取此节点的所有子节点.
/从根节点选取(取子节点)
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)
.选取当前节点
选取当前节点的父节点
@选取属性
表达式及结果:
路径表达式结果
bookstore选取bookstore元素所有子节点
/bookstore选取根元素bookstore,假如路径起始于"/",则此路径始终代表到某元素的绝对路径
/bookstore/book选取属于bookstore的子元素的所有book元素
//book选取所有book子元素,而不管它在文档中的位置
bookstore//book选取属于bookstore元素的后代的所有book元素,而不管它们位于bookstore之下的什么位置
//@lang选取名为lang的所有属性
Java代码示例:
import org.w3c.dom.document;
import org.w3c.dom.NodeList;

import javax.xml.parsers.documentBuilder;
import javax.xml.parsers.documentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import java.io.ByteArrayInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.Reader;
import java.nio.charset.StandardCharsets;

public class Main {
    public static void main(String[] args) {
        try
        {

            
            Reader reader=null;
            int length=0;
            char[] ch=null;
            reader=new FileReader("test.xml");
            ch=new  char[1024];
            length=reader.read(ch);
            String testtext=new String(ch,0,length);

            
            document doc=null;
            XPath xPath=null;
            documentBuilderFactory dbf=documentBuilderFactory.newDefaultInstance();
            dbf.setValidating(false);
            InputStream inputStream=new ByteArrayInputStream(testtext.getBytes(StandardCharsets.UTF_8));
            documentBuilder db=dbf.newdocumentBuilder();
            doc=db.parse(inputStream);
            XPathFactory factory=XPathFactory.newInstance();
            xPath=factory.newXPath();

            NodeList nodeList_bookstore=(NodeList) xPath.evaluate("bookstore",doc, XPathConstants.NODESET);
            int nodeList_bookstoreLength=nodeList_bookstore.getLength();
            for(int i=0;i 
谓语(Predicates) 
谓语用来查找某个特定的节点或者包含某个指定的值的节点.谓语被嵌在方括号中: 
路径表达式结果
/bookstore/book[1]选取属于bookstore子元素的第一个book元素
/bookstore/book[last()]选取属于bookstore子元素的最后一个book元素
/bookstore/book[last()-1]选取属于bookstore子元素的倒数第二个book元素
/bookstore/book[position()< 3]选取最前面的两个属于bookstore元素的子元素的book元素
//title[@lang]选取所有拥有名为lang的属性的title元素
//title[@lang=‘eng’]选取所有title元素,且这些元素拥有值为eng的lang属性
/bookstore/book[price>35.00]选取bookstore元素的所有book元素,且其中的price元素的值须大于35.00
/bookstore/book[price>35.00]//title选取bookstore元素中的book元素的title元素,且其中的price元素的值须大于35.00
选取未知节点
通配符描述
*匹配任何元素节点
@*匹配任何属性节点
node()匹配任何类型的节点
表达式及结果:
路径表达式结果
/bookstore Reader reader=null; int length=0; char[] ch=null; reader=new FileReader("test.xml"); ch=new char[1024]; length=reader.read(ch); String testtext=new String(ch,0,length); document doc=null; XPath xPath=null; documentBuilderFactory dbf=documentBuilderFactory.newDefaultInstance(); dbf.setValidating(false); InputStream inputStream=new ByteArrayInputStream(testtext.getBytes(StandardCharsets.UTF_8)); documentBuilder db=dbf.newdocumentBuilder(); doc=db.parse(inputStream); XPathFactory factory=XPathFactory.newInstance(); xPath=factory.newXPath(); NodeList nodeList=(NodeList) xPath.evaluate("此处代入表达式或通配符",doc, XPathConstants.NODESET); int nodeListLength=nodeList.getLength(); for(int i=0;i
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号