上次记得忘了记最流行的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的更多相关文章

  1. Java解析XML之Dom4j

    Java解析XML文件的方法有多种,个人感觉最常用的是使用Dom4j来解析XML文件.下面就简单介绍下Dom4j的基础使用. Dom4j需要jar包的支持,大家可以从网络上下载,如dom4j-1.6. ...

  2. java 解析xml(dom4j.jar)

    先导入jar包 <?xml version="1.0" encoding="UTF-8"?> <companys> <compan ...

  3. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    [目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...

  4. JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)

    1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...

  5. 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来 ...

  6. java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol

    java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol 完整错误信息: org.dom4j.Document ...

  7. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

  8. Java 解析 XML

    Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点 ...

  9. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

随机推荐

  1. 更改node版本

    npm install -g n n stable 或 n v4.5.0

  2. Datanode启动问题 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering>

    -- ::, INFO org.apache.hadoop.hdfs.server.datanode.DataNode: supergroup = supergroup -- ::, INFO org ...

  3. ubuntu14.04 在自带python2.7上安装python3.3.5 可以用但是有问题

    一开始写的时候并没有发现这么安装有问题,后来发现问题也不想删了,当个教训,如果想安装从python自带版本换别的版本的话就别接着看了,这么安装有问题.需要进行配置,但是我还不会.其实下面只是差了一步配 ...

  4. 【leetcode刷题笔记】Search in Rotated Sorted Array II

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  5. Python 案例一(计算人体体脂率)

    #计算人体体脂率 #输入部分 #身高 personHeight = input("请输入你的身高(m):") personHeight = float(personHeight) ...

  6. codeforces 676B 模拟 递推

    题意:每秒从最高处的杯子倒一杯酒下来,酒流的方式如图,问t秒装满酒的杯子的数目. 思路:把第一杯的值设为t,glass[i][j]=(glass[i-1][j-1]-1)/2+(glass[i-1][ ...

  7. ELK的使用

    首先安装jdk,我这里使用open-jdk yum list all | grep jdk yum -y install java-1.8.0-openjdk-devel, java-1.8.0-op ...

  8. github与eclipse结合使用

    github是现在流行的代码托管平台,今天以eclipse为例讲解github的使用,新建项目,提交eclipse项目到github,新建分支,合并分支 1.github上新建项目 记下githug项 ...

  9. matlab画折线

    figure(721);hold on;x=1:1:5;%x轴上的数据,第一个值代表数据开始,第二个值代表间隔,第三个值代表终止 a=[203.024,113.857,256.259,244.888, ...

  10. Codeforces 900D Unusual Sequences:记忆化搜索

    题目链接:http://codeforces.com/problemset/problem/900/D 题意: 给定x,y,问你有多少个数列a满足gcd(a[i]) = x 且 ∑(a[i]) = y ...