XML解析之XPath
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;}
/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元素
|
//*
选择所有元素
|
/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元素
|
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的更多相关文章
- Java XML DOM解析(xPath)
(一) XML概念 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等.它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的 ...
- XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】
什么是XML解析 前面XML章节已经说了,XML被设计为"什么都不做",XML只用于组织.存储数据,除此之外的数据生成.读取.传送等等的操作都与XML本身无关! XML解析就是读取 ...
- 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来 ...
- 在Java中使用xpath对xml解析
xpath是一门在xml文档中查找信息的语言.xpath用于在XML文档中通过元素和属性进行导航.它的返回值可能是节点,节点集合,文本,以及节点和文本的混合等.在学习本文档之前应该对XML的节点,元素 ...
- XML.04-dom4j和XPath
body,td { font-family: calibri; font-size: 10pt } XML.04-dom4j和XPath dom4j的基本使用 XPath 啥是XPath XPath语 ...
- 基本XML解析---编写
#import "ViewController.h" #import "DDXML.h" @interface ViewController () @end @ ...
- iOS-数据解析XML解析的多种平台介绍
在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.Tiny ...
- JAVA基础学习之XMLCDATA区、XML处理指令、XML约束概述、JavaBean、XML解析(8)
1.CDATA区在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理.遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直 ...
- Java XML解析工具 dom4j介绍及使用实例
Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...
随机推荐
- mongodb 有一个坑 报错 no mongos proxies found in seed list
mongoose 的报当我从 mongoose@4.5.2 升级到 mongoose@4.6.5的时候,出现了一个问题: Unhandled rejection MongoError: no mong ...
- ubuntu16.04下firefly rk3288的编译安卓4.4
一.背景 OS: ubuntu 16.04 二.配置交叉编译环境 2.1 安装openjdk sudo apt-get install openjdk-7-jdk 2.2 使在同一台机器上可以编译an ...
- win7下把电脑设置成wlan热
有很多公司没有无线网,只有自己的电脑可以上网,现在设置热点,可以手机上网 步骤: 1.看自己的网卡是否支持承载网络,如果不支持,本法就不适用 在CMD里用 netsh wlan show dri ...
- C#学习笔记(十三):继承
继承 object是引用类型 public:最高权限,公开的 Protected:外部不可以访问 Internal:类的默认访问是什么作用域 Private:类成员默认 基类实例:可以通过base ...
- 【BZOJ】 3238: [Ahoi2013]差异
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3238 求:$${\sum _{i=1}^{n-1}\sum _{j=i+1}^{n}len ...
- Codeforces Round #225 (Div. 2) E. Propagating tree dfs序+-线段树
题目链接:点击传送 E. Propagating tree time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- 通过gevent实现【单线程】下的多socket并发
server import sys import socket import time import gevent from gevent import socket,monkey monkey.pa ...
- Codeforces 349B - Color the Fence
349B - Color the Fence 贪心 代码: #include<iostream> #include<algorithm> #include<cstdio& ...
- 2017"百度之星"程序设计大赛 - 资格赛-度度熊与邪恶大魔王(dp+后缀最小值)
度度熊与邪恶大魔王 思路:由于防御和血量的范围很小,所以暴力枚举出对于每种防御造成的每种伤害所需的最小花费,最后只需在伤害大于等于血量的情况下再找到最小花费(这个只需要后缀最小值预处理一下就可以了) ...
- 网站链接facebook 拿新的post
$http({ method: "GET", url: "https://graph.facebook.com/oauth/access_token?client_id= ...