body, table{font-family: 微软雅黑; font-size: 10pt}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。
XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
因此,对 XPath 的理解是很多高级 XML 应用的基础。

基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径
/AAA
选择根元素AAA
/AAA/CCC
选择AAA的所有CCC子元素
/AAA/DDD/BBB
选择AAA的子元素DDD的所有子元素BBB

如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)
//BBB
选择所有BBB元素
//DDD/BBB
选择所有父元素是DDD的BBB元素

星号 * 表示选择所有由星号之前的路径所定位的元素
/AAA/CCC/DDD/*
选择所有路径依附于/AAA/CCC/DDD的元素
/*/*/*/BBB
选择所有的有3个祖先元素的BBB元素
//*
选择所有元素
方块号[ ] 里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而 last() 函数则表示选择集中的最后一个元素.
/AAA/BBB[1]
选择AAA的第一个BBB子元素
/AAA/BBB[last()]
选择AAA的最后一个BBB子元素
@
//@id
选择所有的id属性
//BBB[@id]
选择有id属性的BBB元素
//BBB[@name]
选择有name属性的BBB元素
//BBB[@*]
选择有任意属性的BBB元素
//BBB[not(@*)]
选择没有属性的BBB元素
//和DOM4j对比
Book.xml 最终输出结果:output.xml
<?xml version="1.0" encoding="utf-8"  ?>
<书架>
        <书>
        <书名 id="001">浪潮之巅</书名>
                <作者>吴军</作者>
                <售价>29</售价>
        </书>
        <书>
                <书名 id='002'>数学之美</书名>
                <作者>吴军</作者>
                <售价><第一版>29</第一版></售价>
        </书>
</书架>
<?xml version="1.0" encoding="utf-8"?>
<书架>
  <书>
    <书名 id="001">浪潮之巅</书名> 
    <作者>吴军</作者> 
    <售价>29</售价>
  </书> 
  <书>
    <书名 id="002">java编程思想</书名> 
    <作者>吴军</作者> 
    <售价/>
  </书>
</书架>
package com.java.dom4j;
import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Branch;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4jDemo {
        public static void main(String[] args) throws Exception {
// 这里要导入第三方架包,右键->新建文件夹(lib),把dom4j-1.6.1.jar拷贝进来;然后选中右键->构建路径->添加到构建路径,资源下回出现“引用的库”,这时候才能点开架包使用
// 做完上面的操作,系统就会提示导入刚才加架包
// 通过saxreader获取document对象
                SAXReader reader = new SAXReader();
                Document document = reader.read("Books.xml");
// 按照XPath的方式进行操作

// 获取某个具体的节点内容,得到第一本书的售价 XPath='/书架/书/书名[1]'
//这里还要导入包 jaxen-1.1-beta-6;
                Node node = document.selectSingleNode("/书架/书/书名[1]");
                System.out.println("/书架/书/书名[1]: " + node.getText());

// 打印某节点的所有元素节点 打印第二本书的所有元素节点  XPath=/书架/书[2]/*
                List selectNodes = document.selectNodes("/书架/书[2]/*");
                for(int i=0;i<selectNodes.size();++i){
                        Element child=(Element)selectNodes.get(i);
                        System.out.println("/书架/书[2]/*: " + child.getName());
                }
//修改某个节点的主题内容   把第二本书的名字改《java编程思想》 
//XPath=/书架/书[2]/书名
                Node node2 = document.selectSingleNode("/书架/书[2]/书名");
                node2.setText("java编程思想");
//删除指定元素节点  XPath=/书架/书[2]/售价/第一版
                Node node3 = document.selectSingleNode("/书架/书[2]/售价/第一版");
                System.out.println("/书架/书[2]/售价/第一版: " + node3.getName());
                node3.detach();

// 标准的保存语句,dom4j写回文档会自动写换行方便观看
                OutputFormat format = OutputFormat.createPrettyPrint();  
// 指定XML编码                 
                format.setEncoding("utf-8");
                XMLWriter writer = new XMLWriter(new FileOutputStream ("output.xml"),format);
                writer.write(document);
                writer.close();
        }
}

XML解析之XPath的更多相关文章

  1. Java XML DOM解析(xPath)

    (一) XML概念 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等.它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的 ...

  2. XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】

    什么是XML解析 前面XML章节已经说了,XML被设计为"什么都不做",XML只用于组织.存储数据,除此之外的数据生成.读取.传送等等的操作都与XML本身无关! XML解析就是读取 ...

  3. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  4. 在Java中使用xpath对xml解析

    xpath是一门在xml文档中查找信息的语言.xpath用于在XML文档中通过元素和属性进行导航.它的返回值可能是节点,节点集合,文本,以及节点和文本的混合等.在学习本文档之前应该对XML的节点,元素 ...

  5. XML.04-dom4j和XPath

    body,td { font-family: calibri; font-size: 10pt } XML.04-dom4j和XPath dom4j的基本使用 XPath 啥是XPath XPath语 ...

  6. 基本XML解析---编写

    #import "ViewController.h" #import "DDXML.h" @interface ViewController () @end @ ...

  7. iOS-数据解析XML解析的多种平台介绍

    在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.Tiny ...

  8. JAVA基础学习之XMLCDATA区、XML处理指令、XML约束概述、JavaBean、XML解析(8)

    1.CDATA区在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理.遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直 ...

  9. Java XML解析工具 dom4j介绍及使用实例

    Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...

随机推荐

  1. 全面理解虚拟DOM,实现虚拟DOM

    1.为什么需要虚拟DOM DOM是很慢的,其元素非常庞大,页面的性能问题鲜有由JS引起的,大部分都是由DOM操作引起的.如果对前端工作进行抽象的话,主要就是维护状态和更新视图:而更新视图和维护状态都需 ...

  2. 【TCP/IP详解 卷一:协议】第四章 ARP:地址解析协议 以及其他部分的一些知识

    4.1 引言 数据链路 如以太网(Ethernet) 或者 令牌环网 都有自己的寻址机制(一般为 48 bit 的地址). 一个网络(数据链路层) 可以同时被多个不同的网络使用.比如,一组使用TCP/ ...

  3. HDU 3549 Flow Problem(最大流模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=3549 刚接触网络流,感觉有点难啊,只好先拿几道基础的模板题来练练手. 最大流的模板题. #include< ...

  4. 关于xargs cp中,如何确定拷贝的源和目的 (copied)

    Seker: find . -name "*" |xargs cp ???? 这里 xargs cp 怎么区分cp源 和 cp目的 例如:想把 查询到的文件 都copy到/home ...

  5. Myeclipse中xml文件里自动提示消失解决办法

    IED Eclipse Java EE IDE for Web Developers:DTD 类型约束文件    1. Window->Preferences->XML->XML C ...

  6. hdu 4352 XHXJ's LIS 数位dp+状态压缩

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352 XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others ...

  7. shell 字符串运算符

    字符串运算符 下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg": 运算符 说明 举例 = 检测两个字符串是否相等,相等返回 ...

  8. bash Shell 中如何实现条件判断之if判断

    http://blog.51cto.com/lovelace/1211353 bash中如何实现条件判断?条件测试类型:    整数测试    字符测试    文件测试 一.条件测试的表达式:     ...

  9. Codeforces 496C - Removing Columns

    496C - Removing Columns 思路:暴力,用vis标记数组实时记录一下之前的行i+1和上一行i否全相等,false表示全相等. 代码: #include<bits/stdc++ ...

  10. javascript对象使用总结

    javascript对象使用总结 一.总结 一句话总结:js对象的主要知识点是创建对象和继承,并且创建对象和继承的方法都是逐步层层递进的 创建对象 继承 原型 创建对象 1 <script> ...