dom4j与xpath

2024-06-23 14:38
文章标签 xpath dom4j

本文主要是介绍dom4j与xpath,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DOM4J与Xpath~

  (2007-06-18 17:05:20)
转载
标签: 

dom4j

 

xpath

分类: 学习
       今天的笔记:

  要从 XML 文档中提取信息,最快捷简单的办法就是在程序中嵌入 XPath 表达式。XPath是一种为查询 XML 文档而设计的查询语言(其他查询语言还包括结构化查询语言——SQL针对查询特定类型的关系库而设计和优化的语言以及对象查询语言(OQL)和 XQuery等)。XPath 表达式比繁琐的文档对象模型(DOM)导航代码要容易编写得多(Java 5 推出了javax.xml.xpath 包,这是一个用于 XPath 文档查询的独立于 XML 对象模型的库)。
1:XML常识整理
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
  <book>  
    <title lang="en">Harry Potter</title>  
    <author>J K. Rowling</author>        <year>2005</year>  
    <price>29.99</price>
  </book>
</bookstore>
(1)上面举例的XML文档中,节点类型有:
<bookstore>(document node)
<author>(element node)
lang(attribute node)
(2)节点间的关系有父亲、子、兄、祖:
book元素是title,author,year和price的父亲
title,author,year和price元素都是book元素的子元素
title, author, year, 和 price元素都为兄弟
book元素和bookstore元素都为title元素的祖元素
2XPATH选择节点时常用的路径表达式:
nodename——选择所有目前节的子节
/ ——从根节进行选择
//——选择文档中相吻合的节而不管其在文档的何处
. ——选择当前节
..——当前节的父节
@——选择属性
举例如下:
bookstore——选择所有bookstore元素的子节
/bookstore——选择了bookstore的根元素。注意:如果路径的开始为(/)那此路径一定是到该元素
的绝对路径
bookstore/book——选择了所有在bookstore的子元素book元素所包含的所有元素(其实就为
bookstore里book元素所包含的元素)
//book——选择所有为book元素的内容而不管book元素处于何处(有不同的父也没关系)
bookstore//book——在bookstore元素内所有含有book元素的元素内容(只要book元素的祖元素为
bookstore元素那都符合条件)
//@lang——选择所有属性名为lang的属性
3XPath 数据模型
XPath 1.0 只有四种基本数据类型:
node-set
number
boolean
string
4XPath 表达式
多数 XPath 表达式,特别是位置路径,都返回节点集。
也可以返回其他如:
XPath 表达式 count(//book) 返回文档中的图书数量
XPath 表达式count(//book[@author="Neal Stephenson"]) > 10 返回一个布尔值,如果文档中
 Neal Stephenson 的著作超过 10 本则返回 true,否则返回 false。
evaluate() 方法被声明为返回 Object。实际返回什么依赖于 XPath 表达式的结果以及要求的类型

5DOM4J中的XPATH调用表达式
取某一节点
Element root = (Element) document.selectSingleNode("//root");
取某一节点的属性
Attribute attribute = (Attribute) document.selectSingleNode(//root/cell/@value);

 

 

   根据笔记尝试使用dom4j中的xpath,主要代码如下:

List list=document.selectNodes("//@cout");
for (Iterator iter = list.iterator(); iter.hasNext(); )
{
          Attribute attribute = (Attribute) iter.next();
          String type = attribute.getValue();
          System.out.println(type);
}
   运行,显示错误:找不到xxxclass之类的。

 

   

    在网上搜了一下,尝试将jaxen-1.1-beta-6.jar导入项目可用库,并在程序中添加import org.jaxen.*;程序提示该引用在程序中未使用~不管它先~执行,成功显示结果!

     将import org.jaxen.*;去掉;仍然可以正确显示结果~!!!看来解决错误的是“将jaxen-1.1-beta-6.jar导入项目可用库”,估计是DOM4J中使用XPATH时调用了该库。不想深入多。解决问题足以~

 

 

 

 

 

   



这篇关于dom4j与xpath的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

css选择器和xpath选择器在线转换器

具体前往:Css Selector(选择器)转Xpath在线工具

javaweb-day02-2(00:40:06 XML 解析 - Dom4j解析开发包)

导入dom4j开发包:dom4j-1.6.1.jar   在工程下建一个文件夹lib,将dom4j-1.6.1.jar拷到里边。右键add to build path。  dom4j-1.6.1\lib文件夹下还有一些jar包,是开发过程中dom4j所需要依赖的jar包,如开发过程中报错,则需导入。   用dom4j怎么做呢? 只要是开源jar包提供给你的时候,它会在开源包里面提供

[Xpath] Xpath基础知识

1.Xpath(XML Path Language)介绍 Xpath用于在HTML文档中通过元素(HTML标签)和属性(HTML标签的属性)进行数据定位 Xpath的优势:灵活且稳定 HTML树状结构 HTML的结构是树形结构,HTML是根节点,所有的其他元素节点都是从根节点发出的,其他元素都是这棵树上的节点Node,每个节点还可能有属性和文本 所有的HTML标签都有很强的

XML-dom4j实战

dom4j是一个用来读取XML的工具包,它是采用DOM思想来读取的,也就是把XML组织成一个文档树,然后根据相应的节点来读取。 import java.io.File;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import

爬虫二:获取豆瓣电影Top250(Requests+XPath+CSV)

描述: 在上一篇获取豆瓣图书Top250的基础上,获取豆瓣电影Top250的数据并将结果写入CSV文件中。 代码: # -*- coding: UTF-8 -*-import requestsfrom lxml import etreeimport timeimport csv# 从网页上获取电影数据moviedata = []count = 0for i in range(1

爬虫一:获取豆瓣图书Top250(Requests+XPath)

目的: 获取豆瓣图书Top250的所有书目信息。 豆瓣网址:https://book.douban.com/top250 代码: import requestsfrom lxml import etreeimport timefor i in range(10):url = 'https://book.douban.com/top250?start=' + str(25*i)data

HtmlCleaner无法通过XPath获取到数据

通过浏览器F12,选取的Xpath路径有时无法定位到目标即:objects为空,无法通过XPath获取到数据。 原因分析: 不同浏览器获取到的XPath不同XPath路径中有tbody标签Xpath路径有html,示例: Xpath: /html/body/div[2] 希望获取的数据是动态加载的 Xpath路径规则介绍: 语法 选取结点 表达式描述/从根节点选取//从匹配选择的当

爬虫工具:浅谈HtmlCleaner+XPath解析HTML

现在常用的网页解析工具有:Jsoup,JsoupXpath,HtmlCleaner。 jsoup 是一款Java 的XML、HTML解析器,可直接解析某个URL地址、HTML文本内容和已经存在的文件。 JsoupXPath是基于Jsoup的拓展,使用路径的形式解析XML和HTML文档。核心类为JXDocument;JsoupXPath的节点对象JXNode不仅可以获取标签节点,还可以获取属性节

Dom4j 写文件不全

今天用dom4j 写文件,要么写文件不全,要么文件为空。 刚开始有问题的是: package com.zhangyue.translate;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import ja

dom4j-dom-sax解析

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://www.example.org/web-app_2_5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.example.org/web-app_2_5 w