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. PHP的Session机制解析 2

    在鸟哥的博客看到对php session的过期时间的一篇文章,在此记录. 原文地址:http://www.laruence.com/2012/01/10/2469.html 以下是鸟哥博客原文: 今天 ...

  2. delphi在64位系统下写注册表注意事项

    HKEY_LOCAL_MACHINE写这个主键下的项,在64位系统下可能会重定向,所以构造时要加KEY_WOW64_64KEY reg := TRegistry.Create(KEY_WRITE or ...

  3. zabbix部署agent

    1.下载zabbix源 rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-2.el7.noarc ...

  4. 美化Windows

    更改壁纸 https://www.omgubuntu.co.uk/2010/09/a-look-back-at-every-ubuntu-default-wallpaper google: ubunt ...

  5. pytorch与numpy中的通道交换问题

    pytorch网络输入图像的格式为(C, H, W),而numpy中的图像的shape为(H,W,C) 所以一般需要变换通道,将numpy中的shape变换为torch中的shape. 方法如下: # ...

  6. Django ajax小例

    urls.py: url(r'^ajaxstudents/$', views.ajaxstudents), url(r'^getstudentsinfo/$', views.getstudentsin ...

  7. vue学习 ---- 使用vue-router 进行跳转

    前提说明,在学习vue的时候,尽量的以官网的为主,而且框架本身与官方文档都是在不断迭代更新的. 在vue的框架中,目前都是使用vue-router 来进行页面跳转的,而不是<a>.先贴一个 ...

  8. 教你如何创建vue环境

    教你如何创建vue的环境 wdnmd我操作了一万年,终于成功创建了vue的环境,现在就来讲一下,到底应该怎么操作才能成功创建vue的 第一步 : 我们应该做的不是别的,而是去官方网站下载文件 node ...

  9. [fw]谈EXPORT_SYMBOL使用

    EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的.2.6就必须用EXPO ...

  10. Hibernate4教程五:事务和并发

    Hibernate本身没有事务的实现 Hibernate 直接使用 JDBC 连接和 JTA 资源,不添加任何附加锁定行为.也就是说你在Hibernate里面使用的事务要么是JDBC的事务,要么是JT ...