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 ...
随机推荐
- mongodb配置详解
#启用日志文件,默认启用 journal=true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false quiet=false # 日志文件位置 logpath=/usr/loc ...
- Mongodb 性能测试
测试硬件环境 MacPro 处理器名称: Intel Core i7 处理器速度: 2.5 GHz 处理器数目: 1 核总数: 4 L2 缓存(每个核): 256 KB L3 缓存: 6 MB 内存: ...
- NTFS文件系统的UsnJrnl对于FileReference的处理
1. 背景 http://stackoverflow.com/q/20418694/941650 这里面临的一个核心问题是,如果MFT Reference相等,能够表明这些记录代表的是同一个文件吗? ...
- Cocos2d-x之MessageBox
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 在cocos2d-x中使用的对话框为MessageBox,因为cocos2d-x已经包装好了:但是在一般的游戏设置中,我们不会使用coco ...
- 洛谷 P1119 灾后重建——dijstra
先上一波题目 https://www.luogu.org/problem/P1119 这道题我们可以将询问按时间排序 然后随着询问将相应已经重建成功的点进行操作 每次更新一个点就以他为起点跑一遍dij ...
- docker--shell和Exec格式
shell格式 RUN apt-get install -y vim CMD echo "docker so easy" ENTRYPOINT echo "docker ...
- 使用VS 2019发布.net core程序并部署到IIS的最新教程
不管你是使用.net core开发的是web api还是网站类的程序,如果你是部署到IIS,那么下面的内容都适合于你,不会将.net core程序部署到IIS的朋友,可以看看这篇手把手教你部署.net ...
- HTML 使用CSS 如何去掉文本聚焦框 HTML 使用CSS 如何去掉文本聚焦框 : outline 值设为none 修改input、textarea输入框placeholder样式
HTML 使用CSS 如何去掉文本聚焦框 : outline 值设为none 修改input.textarea输入框placeholder样式 兼容性代码: input::-webkit-input ...
- java当中的Timer定时器的4种使用方式
import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask ...
- Ubuntu下使用git clone 的权限问题解决方法
问题1.sign_and_send_pubkey: signing failed: agent refused operation,执行如下语句: eval "$(ssh-agent -s) ...