(补)Java解析XML之dom4j
上次记得忘了记最流行的dom4j方法了,用的还是上次的那个XML文件
注:需要添加dom4j.jar文件
package com.xujingyang.dom4j; import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.junit.Test; import com.xujingyang.utils.dom4jUtil; public class dom4jTest { /**
* 获取指定节点的内容
*/
@Test
public void testDom4j() {
try {
Document document = dom4jUtil.getDocument("src/books.xml");
// 获取根节点
Element rootElement = document.getRootElement();
// 获取根节点的子节点集合的第一个节点
Element element = (Element) rootElement.elements().get(0);
// 获取对应子节点的文本
String text = element.element("price").getText();
System.out.println(text);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} //==================递归遍历所有子节点的文本开始======================================
@Test
public void test2() {
try {
Element rootElement = dom4jUtil.getDocument("src/books.xml")
.getRootElement();
treeWalk(rootElement);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static void treeWalk(Element element) {
//获取子节点个数
int nodeCount = element.nodeCount(); //遍历子节点
for (int i = 0; i < nodeCount; i++) {
//获取第i个子节点
Node node = element.node(i);
if (node instanceof Element) {
//如果仍然是节点就递归
treeWalk((Element) node);
} else {
//不是就打印节点内容
String text = node.getStringValue();
System.out.println(text);
}
}
} //===================递归遍历所有子节点的文本结束================================================ /**
* 添加新子节点
*/
@Test
public void test3(){
try {
Document document = dom4jUtil.getDocument("src/books.xml");
// 获取根节点
Element rootElement = document.getRootElement();
Element element = (Element) rootElement.elements("book").get(0);
//添加子节点信息
element.addElement("特价").setText("21");
//写入源文件
dom4jUtil.writeDocument(document); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* 添加同级新节点
*/
@Test
public void test4(){
try {
Document document = dom4jUtil.getDocument("src/books.xml");
// 获取根节点
Element rootElement = document.getRootElement();
Element element = (Element) rootElement.elements("book").get(0); Element createElement = DocumentHelper.createElement("新价");
createElement.setText("31");
//向子节点的指定位置添加新节点
element.elements().add(2, createElement);
//写入源文件
dom4jUtil.writeDocument(document); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* 删除指定的节点
*/
@Test
public void test5(){
try {
Document document = dom4jUtil.getDocument("src/books.xml");
// 获取根节点
Element rootElement = document.getRootElement();
//找到子节点
Element element = (Element) rootElement.elements("book").get(0);
//找到要删除的节点
Element tejia = element.element("特价");
//删除
element.remove(tejia);
//写入文件
dom4jUtil.writeDocument(document);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
程序用到的工具类:
package com.xujingyang.utils; import java.io.FileOutputStream; import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class dom4jUtil { /**
* 得到Document对象
*
* @param path
* @return
* @throws Exception
*/
public static Document getDocument(String path) throws Exception {
SAXReader reader = new SAXReader();
return reader.read(path);
} /**
* 写入XML
* @param document
* @throws Exception
*/
public static void writeDocument(Document document) throws Exception {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(
"src/books.xml"), format);
xmlWriter.write(document);
}
}
(补)Java解析XML之dom4j的更多相关文章
- Java解析XML之Dom4j
Java解析XML文件的方法有多种,个人感觉最常用的是使用Dom4j来解析XML文件.下面就简单介绍下Dom4j的基础使用. Dom4j需要jar包的支持,大家可以从网络上下载,如dom4j-1.6. ...
- java 解析xml(dom4j.jar)
先导入jar包 <?xml version="1.0" encoding="UTF-8"?> <companys> <compan ...
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
[目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...
- JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)
1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析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解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol
java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol 完整错误信息: org.dom4j.Document ...
- java解析xml的三种方法
java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...
- Java 解析 XML
Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点 ...
- JAVA解析XML的四种方式
java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...
随机推荐
- php类和对象(二)
面向对象第三大特性:多态 概念: 当父类引用指向子类实例的时候,由于子类对父类函数进行了重写,导致我们在使用该引用取调用相应方法时表现出的不同 条件: 1.必须有继承 2.子类必须对父类的方法进行重写 ...
- Data Structure Linked List: Write a function to reverse a linked list
iterative太简单不写了 http://www.geeksforgeeks.org/write-a-function-to-reverse-the-nodes-of-a-linked-list/ ...
- spring-boot3
更多的配置: # =================================================================== # COMMON SPRING BOOT PR ...
- shell文件相关指令
文件解压缩tar 请参考文档:http://blog.csdn.net/eroswang/article/details/5555415/ tar -zcvf ${standardpath}${fil ...
- Spring Cloud之网关
接口的分类: 开放接口:可以授权一些接口口OAuth2.0协议方式 第三方联合登录 内部接口: 一般只能在局域网中进行访问,服务与服务之间关系都在同一个微服务系统中.目的是为了保证安全问题 接口设 ...
- spring+mybatis的事务配置
出自:http://kinglixing.blog.51cto.com/3421535/723870 定义一个实体类:Emp.java package com.lixing.scm.entity; p ...
- name lookup of 'res' changed for new ISO 'res' scoping
#include<iostream> using namespace std; int pow ( int val, int exp ); int main() { int val = 2 ...
- 关于React前端构建的一般过程 - 理论篇
概要 本文以个人阅读实践经验归纳前端架构构建过程,以Step by Step方式说明创建一个前端项目的过程.并会对每个阶段所使用的技术进行可替代分析,如Express替换Hapi或者Koa的优缺点分析 ...
- jmeter 多压力机并发测试过程
要实现多台压力机并发,就必须有多台服务器上安装了jmeter程序包,首先把一台服务器作为主压力机,测试脚本放到这台机器上,主压力机与从压力机在同一局域网中,服务器之间可以ping通 第一步:在linu ...
- 关于MFC中重载函数是否调用基类相对应函数的问题
在重载CDialog的OnInitDialog()函数的时候,在首行会添加一句:CDialongEx::OnInitDialog();语句,这是为什么呢?什么时候添加,什么时候不添加? 实际上,我们在 ...