5、java操作xml,dom4j
、
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的更多相关文章
- java操作xml的一个小例子
最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要 ...
- Java操作XML的JAXB工具
在java中操作XML的工作中中,比较方便的工具是JAXB(Java Architecture for XML Binding). 利用这个工具很方便生成XML的tag和Java类的对应关系.参照网上 ...
- Java操作XML文件 dom4j 篇
在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io. ...
- Java操作XML牛逼利器JDOM&DOM4J
JDOM JDOM 是一种使用 XML(标准通用标记语言下的一个子集) 的独特 Java 工具包,用于快速开发 XML 应用 程序. JDOM 官方网站:http://www.jdom.org/ 利 ...
- 用java操作XML文件(DOM解析方式)
XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...
- Java操作xml文件
Bbsxml.java public class Bbsxml { private String imgsrc; private String title; private String url; p ...
- java操作xml方式比较与详解(DOM、SAX、JDOM、DOM4J)
java中四种操作(DOM.SAX.JDOM.DOM4J)xml方式的比较与详解 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准. ...
- Java操作xml文件的jar包dom4j
只能解析xml文件,不能解析普通的文件 https://www.cnblogs.com/sharpest/p/7877501.html
- Java操作XML的工具类
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp ...
随机推荐
- 二次封装dojo slider
上次的二次封装timeslider,挺有意思,又来封装一个dojo的,样式还是用arcgis的.实现更多功能,包括HorizontalSlider和VerticalSlider, 刻度的显示隐藏,标签 ...
- Gentoo 搭遗
安装 app-portage/gentoolkit 使用如下方式,可查询某个被包安装的文件列表,可以筛选文件类型 equey files [--filter=doc] <包名称> emer ...
- Embedding和Word2Vec实战
在之前的文章中谈到了文本向量化的一些基本原理和概念,本文将介绍Word2Vec的代码实现 https://www.cnblogs.com/dogecheng/p/11470196.html#Word2 ...
- 【BZOJ2138】stone
题目 好厉害的题啊 这道题不难看成一个二分图模型,但是给人一种求最大匹配的感觉,这实在不是很好求的样子,于是自闭了 但是不妨这样来考虑,对于一个需求\(k_i\),我们求一个最大的\(x\leq k_ ...
- JQ广告弹窗&随机抽奖————JQ
1.JQ广告弹窗 <div id="flo"> <img src="image.jpeg"> </div> <scri ...
- Flask-Login的实现
Flask-Login Flask-Login 为 Flask 提供用户 session 的管理机制.它可以处理 Login.Logout 和 session 等服务. 作用: 将用户的 id 储存在 ...
- find 文件查找
目录 find文件查找 1.为什么要使用文件查找 2.根据文件名称查找-name 3.根据文件大小查找-size 4.根据文件类型查找-type f 5.根据文件时间查找-mtime 6.根据文件用户 ...
- 判断Xen虚拟机随想
kvm xen虚拟化技术 剑桥大学开发,vmware visualbox windows下检测是否安装,注册表读取安装路径 linux下检测是否安装 rpm -qa 列出 判断软件包是否安装,rpm ...
- Bootstrap 警告框
<div class="panel panel-primary"> <div class="panel-heading"> <h3 ...
- zabbix监控nginx status页面
在需要添加监控的nginx配置文件中添加下列配置 #zabbix监控nginx配置 location /nginx_status { stub_status on; access_log off; a ...