package com.jjst.db;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XMLWriter {
private static String xmlPath = "src\\main\\java\\com\\jjst\\db\\teacher.xml";
public static void getFamilyMemebers() {
/**
* 创建文件工厂实例
*
*/
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 如果创建的解析器在解析XML文档时必须删除元素内容中的空格,则为true,否则为false
dbf.setIgnoringElementContentWhitespace(true);
try {
/**
* 创建文件对象
*
*/
DocumentBuilder db = dbf.newDocumentBuilder();// 创建xml解析器 解析xml
Document doc = db.parse(xmlPath);
/**
* 遍历列表 对xml文件的数据提取
*
*/
// 根据节点名称来获取所有的节点
NodeList sonlist = doc.getElementsByTagName("son");
for (int i = 0; i < sonlist.getLength(); i++) {
// 节点属性的处理
Element son = (Element) sonlist.item(i);
// 遍历son内所有的子节点
for (Node node = son.getFirstChild(); node != null; node = node.getNextSibling()) {
// 判断元素节点
if (node.getNodeType() == Node.ELEMENT_NODE) {
String name = node.getNodeName();
String value = node.getFirstChild().getNodeValue();
System.out.println(name + "----" + value);
}
}
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
// 修改
public static void modifySon() {
// 创建 文件工厂实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(true);
try {
// 从xml文档中获取Dom文档实例
DocumentBuilder db = dbf.newDocumentBuilder();
// 获取Document对象
Document xmldoc = db.parse(xmlPath);
// 获取根节点
Element root = xmldoc.getDocumentElement();
// 定位 id为001的节点
Element per = (Element) selectSingleNode("/father/son[@id='002']", root);
// 将age节点的内容更改为28
per.getElementsByTagName("age").item(0).setTextContent("28");
// 保存
TransformerFactory factory = TransformerFactory.newInstance();
Transformer former = factory.newTransformer();
former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
// 获取目标节点,进行删除,最后保存
public static void discardSon() {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(true);
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document xmldoc = db.parse(xmlPath);
// 获取根节点
Element root = xmldoc.getDocumentElement();
// 定位根节点中的id=002的节点
Element son = (Element) selectSingleNode("/father/son[@id='002']", root);
// 删除该节点
root.removeChild(son);
// 保存
TransformerFactory factory = TransformerFactory.newInstance();
Transformer former = factory.newTransformer();
former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
// 新增节点
public static void createSon() {
// 创建文件工厂实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(false);
try {
DocumentBuilder db = dbf.newDocumentBuilder();
// 创建Document对象
Document xmldoc = db.parse(xmlPath);
// 获取根节点
Element root = xmldoc.getDocumentElement();
// 创建节点son,设置对应的id为004
Element son = xmldoc.createElement("son");
son.setAttribute("id", "004");
// 创建节点name
Element name = xmldoc.createElement("name");
name.setTextContent("小儿子");
son.appendChild(name);
// 创建节点age
Element age = xmldoc.createElement("age");
age.setTextContent("0");
son.appendChild(age);
// 把son添加到根节点中
root.appendChild(son);
// 保存
TransformerFactory factory = TransformerFactory.newInstance();
Transformer former = factory.newTransformer();
former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
// 修改节点信息
public static Node selectSingleNode(String express, Element source) {
Node result = null;
// 创建XPath工厂
XPathFactory xpathFactory = XPathFactory.newInstance();
// 创建XPath对象
XPath xpath = xpathFactory.newXPath();
try {
result = (Node) xpath.evaluate(express, source, XPathConstants.NODE);
System.out.println(result);
} catch (XPathExpressionException e) {
System.out.println(e.getMessage());
}
return result;
}
// 打印
public static void main(String[] args) {
getFamilyMemebers();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
modifySon();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
System.out.println("修改数据");
getFamilyMemebers();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
discardSon();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
System.out.println("删除数据");
getFamilyMemebers();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
createSon();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
System.out.println("添加数据");
getFamilyMemebers();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Maven SpringBoot简单案例 接口 web
共41个文件
class:9个
java:9个
xml:6个
需积分: 36 22 下载量 165 浏览量
2017-10-12
09:20:10
上传
评论
收藏 24KB RAR 举报
温馨提示
SpringBoot 框架 demo 适合初学者 学习,零配置。maven 工具搭建。
资源推荐
资源详情
资源评论
收起资源包目录
SpringBootDemo.rar (41个子文件)
SpringBootDemo
.project 1KB
src
test
resources
java
main
webapp
WEB-INF
jsp
hello.jsp 372B
index.jsp 592B
resources
application.properties 133B
java
com
jjst
db
A.java 325B
XMLWriter.java 6KB
teacher.xml 369B
B.java 427B
Demo4J.java 3KB
runboot
Linklistutile.java 809B
InterfaceT.java 431B
Application.java 544B
LoginController.java 621B
LincklistController.java 665B
target
m2e-wtp
web-resources
META-INF
MANIFEST.MF 353B
maven
com.jjst
SpringBootDemo
pom.properties 228B
pom.xml 1KB
classes
application.properties 133B
com
jjst
db
teacher.xml 369B
A.class 668B
XMLWriter.class 6KB
Demo4J.class 3KB
B.class 888B
runboot
Linklistutile.class 1KB
Application.class 956B
InterfaceT.class 676B
LincklistController.class 1KB
LoginController.class 1KB
META-INF
MANIFEST.MF 353B
maven
com.jjst
SpringBootDemo
pom.properties 228B
pom.xml 2KB
test-classes
.settings
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.common.project.facet.core.xml 252B
org.eclipse.m2e.core.prefs 90B
org.eclipse.jdt.core.prefs 430B
org.eclipse.wst.validation.prefs 50B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.component 683B
.jsdtscope 639B
pom.xml 2KB
.classpath 1KB
共 41 条
- 1
资源评论
死道友不死贫道·
- 粉丝: 3
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功