java对xml文件的读写_java 自己做的对XML文件的读写操作
XML文件实例:
WEB-INF/web.xml
type="javax.sql.DataSource" />
type="javax.sql.DataSource" />
Java类:
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.metadata.IIOMetadataNode;
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 org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.sun.org.apache.xerces.internal.dom.AttrNSImpl;
import com.sun.org.apache.xerces.internal.impl.xs.opti.DefaultNode;
public class T2 {
/**
* 将修改的内容添加到xml文件中
*
* @param document
* @param filename
* @return
*/
public static boolean doc2XmlFile(Document document, String filename) {
boolean flag = true;
try {
/** 将document中的内容写入文件中 */
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
/** 编码 */
//transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
DOMSource source = new DOMSource(document);
//判断路径开头有没有“/”如果有则去掉
filename = "C".equals(filename.charAt(0)) ? filename : filename.substring(1);
StreamResult result = new StreamResult(new FileOutputStream(filename));
transformer.transform(source, result);
} catch (Exception ex) {
flag = false;
ex.printStackTrace();
}
return flag;
}
/**
* 读取xml文件
*
* @param filename
* @return
*/
public static Document load(String filename) {
Document document = null;
try {
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
//判断路径开头有没有“/”如果有则去掉
filename = "C".equals(filename.charAt(0)) ? filename : filename.substring(1);
document = builder.parse(new FileInputStream(filename));
document.normalize();
} catch (Exception ex) {
ex.printStackTrace();
logger.error("找不到文件!");
}
return document;
}
/**
* 演示修改文件的具体某个节点的值
*/
public static void xmlUpdateDemo() {
Document document = load("c://Message.xml");
Node root = document.getDocumentElement();
/** 如果root有子元素 */
if (root.hasChildNodes()) {
/** ftpnodes */
NodeList ftpnodes = root.getChildNodes();
/** 循环取得ftp所有节点 */
for (int i = 0; i < ftpnodes.getLength(); i++) {
NodeList ftplist = ftpnodes.item(i).getChildNodes();
for (int k = 0; k < ftplist.getLength(); k++) {
Node subnode = ftplist.item(k);
//修改节点的值
if (subnode.getNodeType() == Node.ELEMENT_NODE
&& subnode.getNodeName() == "status") {
subnode.getFirstChild().setNodeValue("1");
}
}
}
}
doc2XmlFile(document, "c://Message.xml");
}
/**
* 演示修改文件的具体某个节点的属性
*/
public static void xmlUpdateDemoAttri() {
Document document = load("c://xx.xml");
Node root = document.getDocumentElement();
/** 如果root有子元素 */
if (root.hasChildNodes()) {
/** ftpnodes 根节点的子节点 */
NodeList ftpnodes = root.getChildNodes();
/** 循环取得第一层子节点所有节点 */
for (int i = 0; i < ftpnodes.getLength(); i++) {
Node subnode = ftpnodes.item(i);
//添加或修改某节点的属性配置
if ("Resource".equals(subnode.getNodeName())) {
// 生成一个属性对象
Attr attr = document.createAttribute("ss");
attr.setValue("ssss");
subnode.getAttributes().setNamedItem(attr);
}
}
}
// 将修改的内容添加到xml文件中
doc2XmlFile(document, "c://xx.xml");
}
/**添加新的节点
* 根节点下没有节点的话直接添加
* 根节点下没有重名的直接添加
* 有重名的节点则更新节点属性
* @param nodeName 添加、更新的节点名
* @param attr 属性集合
*/
public static void xmlAddDemoAttri(String filePath,String nodeName,Map attr) {
Document document = load(filePath);
Node root = document.getDocumentElement();
//创建节点元素,并命名
Element element =document.createElement(nodeName);
//向节点中添加属性
for (Object key : attr.keySet().toArray()) {
element.setAttribute(key.toString(), attr.get(key));
}
//找到根节点
NodeList nodeList = document.getElementsByTagName("Context");
//先判断根节点下有没有子节点,没有的话直接添加
Node rootNode = nodeList.item(0);
if(!root.hasChildNodes()){
nodeList.item(0).appendChild(element);
}else{
//如果有重复的节点,flag=true;
boolean flag = false;
NodeList rootChs = rootNode.getChildNodes();
//循环根节点下的所有子节点
for (int i = 0; i < rootChs.getLength(); i++) {
Node node = rootChs.item(i);
//如果没有重名,并且是最后一个节点的就添加
if(!nodeName.equals(node.getNodeName()) && !flag && (i+1) == rootChs.getLength()){
nodeList.item(0).appendChild(element);
}else if(nodeName.equals(node.getNodeName())){
//有重名的就看name属性,name一样就修改属性
if(node.hasAttributes()){
//如果有属性项,判断name属性值,如果name的值相同,则修改其他属性
if(null != node.getAttributes().getNamedItem("name") && attr.get("name").equals(node.getAttributes().getNamedItem("name").getNodeValue())){
// 生成一个属性对象
Attr chAttr = null;
//向节点中添加属性
for (Object key : attr.keySet().toArray()) {
//不更新name属性
if(!"name".equals(key.toString())){
chAttr = document.createAttribute(key.toString());
chAttr.setValue(attr.get(key));
}
}
node.getAttributes().setNamedItem(chAttr);
}else if(null != node.getAttributes().getNamedItem("name") && !attr.get("name").equals(node.getAttributes().getNamedItem("name").getNodeValue()) && !flag && (i+1) == rootChs.getLength()){
//如果name的值不相同,且都没有相同的节点,添加新的节点
System.out.println(attr.get("name"));
System.out.println(node.getAttributes().getNamedItem("name").getNodeValue());
nodeList.item(0).appendChild(element);
}
}
}
}
}
// 将修改的内容添加到xml文件中
doc2XmlFile(document, filePath);
}
public static void main(String args[]) throws Exception {
Map att = new HashMap();
att.put("as", "mmmmmmmmmmmmm");
att.put("name", "jdbc/sqlserver-database");
xmlAddDemoAttri("c://context.xml","Resource",att);
}
}
java对xml文件的读写_java 自己做的对XML文件的读写操作相关推荐
- java中属性文件读取案例_java相关:Spring中属性文件properties的读取与使用详解
java相关:Spring中属性文件properties的读取与使用详解 发布于 2020-6-3| 复制链接 摘记: Spring中属性文件properties的读取与使用详解实际项目中,通常将一些 ...
- 怎么向java窗口中插入XSL表_Java向word中插入Excel文件对象
前言: 在word文件中,虽然也有表格.但是有时我们想要将Excel中表格的大量数据直接插入到word文档中,这就需要用到word的插入对象的功能,也就是直接将Excel文件当做对象插入到word中. ...
- java高效复制文件并移动_Java 7:复制和移动文件和目录
java高效复制文件并移动 这篇文章是我对Java 7 java.nio.file软件包的系列文章的继续,这次涵盖了文件的复制和移动以及完整的目录树. 如果您曾经对Java缺少copy和move方法感 ...
- XML是什么,它可以做什么?——XML详解
知乎上的回答: 举几个栗子说明一下. 比如,我们要给对方传输一段数据,数据内容是"too young,too simple,sometimes naive",要将这段话按照属性拆分 ...
- java没有提供将字符流_JAVA字符流为什么没有把文件复制?
源自:5-2 字符流之文件读写流 JAVA字符流为什么没有把文件复制? package IsPackage; import java.io.FileInputStream; import java.i ...
- java的类型默认存储类型_java 问题:保存对话框的默认文件类型?
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.filechooser.*; ...
- java读取文件指定位置_Java读取指定路径下的文件列表
直接贴代码吧.不过这里要做一个简单的说明,对于这个程序,我们必须保证我们在F盘下有一个log_files的文件夹,因为在后面写入文件的时候,如果路径中的文件不存在,是程序可以自动为其添加,但如果没有了 ...
- java 保存的代码怎么写_java实现写入并保存txt文件的示例代码
java实现写入并保存txt文件的示例代码 发布时间:2020-04-30 15:14:07 来源:亿速云 阅读:110 作者:小新 这篇文章主要为大家详细介绍了java实现写入并保存txt文件的示例 ...
- java接受formdata文件上传_java后端发送formdata上传文件
今天想实现 java 后端发送 formdata 上传文件,为了以后查找方便,特此记录下来 上一次使用 WebClient 实现远程调用 (一个非阻塞.响应式的HTTP客户端,它以响应式被压流的方式执 ...
最新文章
- 机器学习中的偏差和方差是什么?
- 递归上传文件和文件夹至SharePoint
- bootstrap模态框使用
- 关于装箱拆箱导致的异常案例
- mybatis转义符(亲测)
- 【MFC】对话框中创建工具栏
- java int相除向上取整_Java基础篇——Java运算符
- 拾牙的2021年秋招总结(大概会有帮助?)
- [html] H5的Web Storage带来什么好处?
- 远程登录阿里云上的MySQL
- php 打印 trace,php xdebug trace 调试的问题
- Objective-C SQLiteHelper
- 帆软报表二次开发之读取.properties配置文件
- 20155313 杨瀚 《网络对抗技术》实验八 Web基础
- 超级计算机更深的蓝,国际象棋发生革命性变化 老棋手深感力不从心
- java下cmyk图片读取和转换rgb,以及图片压缩
- PDF英文文档免费翻译成中文
- 2011年国庆发布:(cppblog)C++博客十八罗汉造像
- 目前计算机已经发展到哪个阶段,目前电子计算机处于哪个阶段?计算机发展的四个阶段...
- 美国生活第二个月照片(2)