1、首先在项目路径下引入dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar包,jaxp方式解析xml文件

<?xml version="1.0" encoding="UTF-8"?>
<students>
<student name="cn.itcast_0001">
<name>dogdogdog</name>
<age>21</age>
<sex>男</sex>
</student>
</students>
package cn.itcast_020;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
//解析xml文件 jaxp解析方式
public class Demo1 {
// 获得所有学生的信息
public static void main(String[] args) {
// 1 获得jaxp工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2通过工厂获得解析器实现类
try {
DocumentBuilder builder = factory.newDocumentBuilder();
// 3使用解析器加载xml文档==>document
Document doc = builder.parse(new File("src/student.xml"));
// 4获得所有学生元素的集合
NodeList studentList = doc.getElementsByTagName("student");
// 5遍历集合
for (int i = 0; i < studentList.getLength(); i++) {
Element stuEle = (Element) studentList.item(i);
// 获得学生元素的number属性
String number = stuEle.getAttribute("number");
// 获得学生节点下的所有子节点(包括文本在内的一共7个)
NodeList children = stuEle.getChildNodes();
for (int j = 0; j < children.getLength(); j++) {
Node node = children.item(j);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element child = (Element) node;
if (child.getNodeName().equals("name")) {
String name = child.getTextContent();
System.out.println(name);
} else if (child.getNodeName().equals("age")) {
String age = child.getTextContent();
System.out.println(age);
} else if (child.getNodeName().equals("sex")) {
String sex = child.getTextContent();
System.out.println(sex);
}
} }
} } catch (Exception e) { }
}
}

2、自己背着敲的代码

package cn.itcast_020;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
//解析xml文件 jaxp解析方式
public class Demo2 { public static void main(String[] args) {
// 创建jaxp解析工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 获得jaxp解析器
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("src/student.xml");
NodeList nodelist = document.getElementsByTagName("student");
for (int i = 0; i < nodelist.getLength(); i++) {
Element element = (Element) nodelist.item(i); String number = element.getAttribute("number");
NodeList nodes = element.getChildNodes();
for (int j = 0; j < nodes.getLength(); j++) {
Node node = nodes.item(j);
if (node.getNodeType() == Node.ELEMENT_NODE) {// 由于得到的数组中有可能有空字符串,所以要判断是不是Element
Element child = (Element) node;
if (child.getNodeName().equals("name")) {
String name = child.getTextContent();
System.out.println(name);
} else if (child.getNodeName().equals("sex")) {
String sex = child.getTextContent();
System.out.println(sex);
} else {
String age = child.getTextContent();
System.out.println(age);
} }
} } } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

3、使用dom4j进行解析,一个读,一个写  (addElement)

package cn.itcast_020;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.SAXWriter;
import org.dom4j.io.XMLWriter; public class Dom4jAddElement {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
try {
Document doc = reader.read(new File("src/student.xml"));
// 1获得根元素
Element rootElement = doc.getRootElement();
// 2添加Element,添加number属性
Element ele = rootElement.addElement("student").addAttribute(
"number", "cn.itcast_0011");
// 3添加name age sex子元素并添加子元素中的文本
ele.addElement("name").addText("狗");
ele.addElement("age").addText("16");
ele.addElement("sex").addText("男");
// 4将document对象写到文件中
// 创建格式化器
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
try {
// 创建写入器
// 使用字节流绝对不会出现乱码
XMLWriter xml = new XMLWriter(new FileOutputStream(
"src/student2.xml"), format);
// 写入
xml.write(doc);
// 关闭资源
xml.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

4、dom4j ,RemoveElement

package cn.itcast_020;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class Dom4jRemoveElementWithXPath {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
try {
Document doc = reader.read(new File("src/student2.xml"));
//获得根元素
Element root = doc.getRootElement();
//使用xpath找到我们需要的元素
//定义xpath
String XPath = "//student[@number='cn.itcast_0011']";
Element node = (Element) root.selectSingleNode(XPath);
//删除
System.out.println(node.getParent().remove(node));
OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileOutputStream(
"src/student3.xml"), format); writer.write(doc);
writer.close(); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

5、Dom4jXPath修改学生

package cn.itcast_020;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class Dom4jXPath修改学生 {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
try {
Document doc = reader.read(new File("src/student2.xml"));
Element ele = doc.getRootElement();
String xpath = "//student[@number='cn.itcast_0011']";
Element student = (Element) ele.selectSingleNode(xpath);
student.element("age").setText("22");
student.element("sex").setText("男");
student.element("name").setText("赵维真");
OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileOutputStream(
"src/student4.xml"), format);
writer.write(doc);
writer.close(); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

6、dom解析与sax解析的区别

package cn.itcast_020;

import java.io.File;
import java.util.Iterator; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
//dom4j解析适用于含有根元素的Xml文档
//而sax解析和dom解析适用于各种文档
//sax解析占用的内存比较少,效率高,但是不可以增删改查
//dom解析占用的内存多,但是可以增删改查
public class Dom4j解析 {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
Document doc;
try {
doc = reader.read(new File("src/student.xml"));
//1获得根元素
Element root = doc.getRootElement();
//2迭代根元素下的所有名叫student的子元素
for (Iterator it = root.elementIterator(); it.hasNext();) {
Element ele = (Element) it.next();
//3获得student元素的number属性
String number = ele.attributeValue("name");
System.out.println("number" + number);
//4获得stuent子元素的内容(name age sex)
String name = ele.elementText("name");
System.out.println("name" + name);
String age = ele.elementText("age");
System.out.println("age" + age); String sex = ele.elementText("sex");
System.out.println("sex" + sex);
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

7、sax解析

package cn.itcast_020;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; public class MyHandler extends DefaultHandler { @Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
System.out.println("文档开始解析啦");
} @Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
System.out.println("文档解析完毕");
} @Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// 该方法主要获得元素的名称和属性
super.startElement(uri, localName, qName, attributes);
if (qName.equals("student")) {
String name = attributes.getValue("number");
System.out.println("number" + name);
}
} @Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
} @Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// 主要解析文档的中node中节点中的内容
super.characters(ch, start, length);
String content = new String(ch, start, length);
System.out.println(content);
} }

8、sax解析

package cn.itcast_020;

import java.io.File;
import java.io.IOException; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; public class SAX解析 {
public static void main(String[] args) {
// 1 创建sax解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
// 2获取sax解析器
try {
SAXParser parser = factory.newSAXParser();
// 3解析文档
parser.parse(new File("src/student.xml"), new MyHandler()); } catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

9、sax解析形成的dao

package cn.itcast_020;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class StudentXMLDao {
private StudentXMLDao() {
} public StudentXMLDao newInstance() {
return new StudentXMLDao();
} public boolean Add(Student stu) { SAXReader reader = new SAXReader();
try { Document doc = reader.read(new File(this.getClass()
.getClassLoader().getResource("student.xml").getPath()));
// 1获得根元素
Element rootElement = doc.getRootElement();
// 2添加Element,添加number属性
Element ele = rootElement.addElement("student");
// 3添加name age sex子元素并添加子元素中的文本
ele.addElement("name").addText(stu.getName());
ele.addElement("age").addText(String.valueOf(stu.getAge()));
ele.addElement("sex").addText(stu.getSex());
// 4将document对象写到文件中
// 创建格式化器
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
try {
// 创建写入器
// 使用字节流绝对不会出现乱码
XMLWriter xml = new XMLWriter(new FileOutputStream(
"src/student2.xml"), format);
// 写入
xml.write(doc);
// 关闭资源
xml.close();
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} } catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
}

5、java操作xml,dom4j的更多相关文章

  1. java操作xml的一个小例子

    最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要 ...

  2. Java操作XML的JAXB工具

    在java中操作XML的工作中中,比较方便的工具是JAXB(Java Architecture for XML Binding). 利用这个工具很方便生成XML的tag和Java类的对应关系.参照网上 ...

  3. Java操作XML文件 dom4j 篇

    在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io. ...

  4. Java操作XML牛逼利器JDOM&DOM4J

    JDOM  JDOM 是一种使用 XML(标准通用标记语言下的一个子集) 的独特 Java 工具包,用于快速开发 XML 应用 程序. JDOM 官方网站:http://www.jdom.org/ 利 ...

  5. 用java操作XML文件(DOM解析方式)

    XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...

  6. Java操作xml文件

    Bbsxml.java public class Bbsxml { private String imgsrc; private String title; private String url; p ...

  7. java操作xml方式比较与详解(DOM、SAX、JDOM、DOM4J)

    java中四种操作(DOM.SAX.JDOM.DOM4J)xml方式的比较与详解     1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准. ...

  8. Java操作xml文件的jar包dom4j

    只能解析xml文件,不能解析普通的文件 https://www.cnblogs.com/sharpest/p/7877501.html

  9. Java操作XML的工具类

    import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp ...

随机推荐

  1. 戴尔DELL P2419H显示器连接笔记本之后,笔记本的耳机不工作了

    去control panel,找到sound 在playback的tab上,重新设置default

  2. 【玩转SpringBoot】异步任务执行与其线程池配置

    同步代码写起来简单,但就是怕遇到耗时操作,会影响效率和吞吐量. 此时异步代码才是王者,但涉及多线程和线程池,以及异步结果的获取,写起来颇为麻烦. 不过在遇到SpringBoot异步任务时,这个问题就不 ...

  3. Windows 08R2 IIS网站架设

    目录 目录 配置和安装IIS 环境设置 安装IIS服务器 网站的站点目录和欢迎页面 配置和安装IIS IIS是Windows的网站服务器,所以配置IIS服务的前提是需要一个网址.和DNS域名并添加主机 ...

  4. 2019杭电多校第⑨场B Rikka with Cake (主席树,离散化)

    题意: 给定一块n*m的矩形区域,在区域内有若干点,每个顶点发出一条射线,有上下左右四个方向,问矩形被分成了几个区域? 思路: 稍加观察和枚举可以发现,区域数量=射线交点数+1(可以用欧拉定理验证,但 ...

  5. swiper.js 响应式多图轮播特效

    swiper.js实现响应式的左右切换图片案例展示布局 1.head引入css文件 <link type="text/css" rel="stylesheet&qu ...

  6. 2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文

    2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文:https://juejin.im/post/5b94d8965188255c5a0cdc02

  7. Memory layout of x86_64 in Linux

    Blue : User Space 128TBRed : Kernel Space 512MBThe rest of the address space goes to various parts o ...

  8. js 中的深拷贝与浅拷贝

    在面试中经常会问到js的深拷贝和浅拷贝,也常常让我们手写,下面我们彻底搞懂js的深拷贝与浅拷贝. 在js中 Array 和 Object  这种引用类型的值,当把一个变量赋值给另一个变量时,这个值得副 ...

  9. 2018-8-10-win10-UWP-用Path画图

    title author date CreateTime categories win10 UWP 用Path画图 lindexi 2018-08-10 19:16:50 +0800 2018-2-1 ...

  10. python基础--逻辑运算

    #and or not#and 且 :两边都为真才是真#or 或:一个真就是真(一真为真)#ont 非:相反#优先级:1.not>and>or#同一优先级由左向右以此计算!#列子:prin ...