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文件的读写操作相关推荐

  1. java中属性文件读取案例_java相关:Spring中属性文件properties的读取与使用详解

    java相关:Spring中属性文件properties的读取与使用详解 发布于 2020-6-3| 复制链接 摘记: Spring中属性文件properties的读取与使用详解实际项目中,通常将一些 ...

  2. 怎么向java窗口中插入XSL表_Java向word中插入Excel文件对象

    前言: 在word文件中,虽然也有表格.但是有时我们想要将Excel中表格的大量数据直接插入到word文档中,这就需要用到word的插入对象的功能,也就是直接将Excel文件当做对象插入到word中. ...

  3. java高效复制文件并移动_Java 7:复制和移动文件和目录

    java高效复制文件并移动 这篇文章是我对Java 7 java.nio.file软件包的系列文章的继续,这次涵盖了文件的复制和移动以及完整的目录树. 如果您曾经对Java缺少copy和move方法感 ...

  4. XML是什么,它可以做什么?——XML详解

    知乎上的回答: 举几个栗子说明一下. 比如,我们要给对方传输一段数据,数据内容是"too young,too simple,sometimes naive",要将这段话按照属性拆分 ...

  5. java没有提供将字符流_JAVA字符流为什么没有把文件复制?

    源自:5-2 字符流之文件读写流 JAVA字符流为什么没有把文件复制? package IsPackage; import java.io.FileInputStream; import java.i ...

  6. java的类型默认存储类型_java 问题:保存对话框的默认文件类型?

    import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.filechooser.*; ...

  7. java读取文件指定位置_Java读取指定路径下的文件列表

    直接贴代码吧.不过这里要做一个简单的说明,对于这个程序,我们必须保证我们在F盘下有一个log_files的文件夹,因为在后面写入文件的时候,如果路径中的文件不存在,是程序可以自动为其添加,但如果没有了 ...

  8. java 保存的代码怎么写_java实现写入并保存txt文件的示例代码

    java实现写入并保存txt文件的示例代码 发布时间:2020-04-30 15:14:07 来源:亿速云 阅读:110 作者:小新 这篇文章主要为大家详细介绍了java实现写入并保存txt文件的示例 ...

  9. java接受formdata文件上传_java后端发送formdata上传文件

    今天想实现 java 后端发送 formdata 上传文件,为了以后查找方便,特此记录下来 上一次使用 WebClient 实现远程调用 (一个非阻塞.响应式的HTTP客户端,它以响应式被压流的方式执 ...

最新文章

  1. 机器学习中的偏差和方差是什么?
  2. 递归上传文件和文件夹至SharePoint
  3. bootstrap模态框使用
  4. 关于装箱拆箱导致的异常案例
  5. mybatis转义符(亲测)
  6. 【MFC】对话框中创建工具栏
  7. java int相除向上取整_Java基础篇——Java运算符
  8. 拾牙的2021年秋招总结(大概会有帮助?)
  9. [html] H5的Web Storage带来什么好处?
  10. 远程登录阿里云上的MySQL
  11. php 打印 trace,php xdebug trace 调试的问题
  12. Objective-C SQLiteHelper
  13. 帆软报表二次开发之读取.properties配置文件
  14. 20155313 杨瀚 《网络对抗技术》实验八 Web基础
  15. 超级计算机更深的蓝,国际象棋发生革命性变化 老棋手深感力不从心
  16. java下cmyk图片读取和转换rgb,以及图片压缩
  17. PDF英文文档免费翻译成中文
  18. 2011年国庆发布:(cppblog)C++博客十八罗汉造像
  19. 目前计算机已经发展到哪个阶段,目前电子计算机处于哪个阶段?计算机发展的四个阶段...
  20. 美国生活第二个月照片(2)

热门文章

  1. [导入]实现数字分页
  2. 比解决问题更重要的,是找到正确的问题
  3. 不服来战!这才是产品汪与程序猿撕逼的正确方式
  4. datatables使用指南
  5. 85.Mongoose指南 - Schema
  6. Hyper-V Server虚拟机快照(检查点)
  7. iOS开发之第三方框架Masonry
  8. Mac OS X 安装教程
  9. Windows下lex 与 yacc的使用
  10. Android 之 LogDog