java读写本地xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<config>
<product>
<good canAnc="0" canSale="0" id="1" name="联想电脑" price="1200"/>
<good canAnc="0" canSale="0" id="2" name="香草巧克力冰淇淋" price="1200"/>
<good canAnc="0" canSale="0" id="3" name="巧克力冰淇淋" price="1200"/>
<good canAnc="0" canSale="0" id="4" name="意式浓缩咖啡" price="1800"/> </product>
</config>
//Test
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*; public class Test { /**
* 读xml文件
* @param args
*/
public static void main(String[] args) {
// 创建一个DocumentBuilderFactory对象
DocumentBuilderFactory xDocumentBuilderFactory = DocumentBuilderFactory.newInstance();
try {
// 创建一个DocumentBuilder对象
DocumentBuilder xdocumentBuilder = xDocumentBuilderFactory.newDocumentBuilder();
// 传入要解析的XML文件
Document xDocument = xdocumentBuilder.parse(new File("D:/config.xml"));
// 通过标签获得节点集合
NodeList beanList = xDocument.getElementsByTagName("good");
System.out.println("共有" + beanList.getLength() + "个节点");
// 遍历每一个bean节点
for (int i = 0; i < beanList.getLength(); i++) {
// 获取其中一个节点
String id = beanList.item(i).getAttributes().item(2).getNodeValue();
String name = beanList.item(i).getAttributes().item(3).getNodeValue();
String price = beanList.item(i).getAttributes().item(4).getNodeValue();
String canSale = beanList.item(i).getAttributes().item(1).getNodeValue();
System.out.println(id + "-" + name + "-" + price + "-" + canSale);
//当i=0,即把第一个good的第index=3的属性值修改为联想电脑
if(i==0){
beanList.item(i).getAttributes().item(3).setNodeValue("联想电脑");
}
}
//修改之后写入本地xml
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(xDocument);
StreamResult result = new StreamResult(new File("D:/config.xml"));
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(source, result);
System.out.println("XML file updated successfully"); } catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} } }
参考https://blog.csdn.net/Rongbo_J/article/details/50240547
参考内容
DOM解析方式也可用于修改XML数据,我们可以使用它完成新增元素、删除元素、修改元素值、修改元素属性等操作。
我们的XML文件,内容如下:
employee.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Employees>
<Employee id="1">
<name>Pankaj</name>
<age>29</age>
<role>Java Developer</role>
<gender>Male</gender>
</Employee>
<Employee id="2">
<name>Lisa</name>
<age>35</age>
<role>CSS Developer</role>
<gender>Female</gender>
</Employee>
</Employees>
我们将修改XML文件的内容:
1.根据员工的性别(gender)修改”id”属性值,性别为男(Male)的id属性值中追加”M”,为女(Female)的id属性值追加”F”。
2.修改name元素的值,全部变成大写。
3.”gender”元素已经没有存在的意义了,我们删除它。
4.在employee节点下新增一个”salary”节点。
当我们完成上述操作后,将内容保存在一个新的xml文件中。
下面是使用DOM方式解析的Java程序代码:
ModifyXMLDOM.java
package com.journaldev.xml;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class ModifyXMLDOM {
public static void main(String[] args) {
String filePath = "employee.xml";
File xmlFile = new File(filePath);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
try {
dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
//update attribute value
updateAttributeValue(doc);
//update Element value
updateElementValue(doc);
//delete element
deleteElement(doc);
//add new element
addElement(doc);
//write the updated document to file or console
doc.getDocumentElement().normalize();
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("employee_updated.xml"));
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(source, result);
System.out.println("XML file updated successfully");
} catch (SAXException | ParserConfigurationException | IOException | TransformerException e1) {
e1.printStackTrace();
}
}
private static void addElement(Document doc) {
NodeList employees = doc.getElementsByTagName("Employee");
Element emp = null;
//loop for each employee
for(int i=0; i<employees.getLength();i++){
emp = (Element) employees.item(i);
Element salaryElement = doc.createElement("salary");
salaryElement.appendChild(doc.createTextNode("10000"));
emp.appendChild(salaryElement);
}
}
private static void deleteElement(Document doc) {
NodeList employees = doc.getElementsByTagName("Employee");
Element emp = null;
//loop for each employee
for(int i=0; i<employees.getLength();i++){
emp = (Element) employees.item(i);
Node genderNode = emp.getElementsByTagName("gender").item(0);
emp.removeChild(genderNode);
}
}
private static void updateElementValue(Document doc) {
NodeList employees = doc.getElementsByTagName("Employee");
Element emp = null;
//loop for each employee
for(int i=0; i<employees.getLength();i++){
emp = (Element) employees.item(i);
Node name = emp.getElementsByTagName("name").item(0).getFirstChild();
name.setNodeValue(name.getNodeValue().toUpperCase());
}
}
private static void updateAttributeValue(Document doc) {
NodeList employees = doc.getElementsByTagName("Employee");
Element emp = null;
//loop for each employee
for(int i=0; i<employees.getLength();i++){
emp = (Element) employees.item(i);
String gender = emp.getElementsByTagName("gender").item(0).getFirstChild().getNodeValue();
if(gender.equalsIgnoreCase("male")){
//prefix id attribute with M
emp.setAttribute("id", "M"+emp.getAttribute("id"));
}else{
//prefix id attribute with F
emp.setAttribute("id", "F"+emp.getAttribute("id"));
}
}
}
}
输出xml文件内容:
employee_updated.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Employees>
<Employee id="M1">
<name>PANKAJ</name>
<age>29</age>
<role>Java Developer</role>
<salary>10000</salary>
</Employee>
<Employee id="F2">
<name>LISA</name>
<age>35</age>
<role>CSS Developer</role>
<salary>10000</salary>
</Employee>
</Employees>
java读写本地xml的更多相关文章
- Java读写Windows共享文件夹 .
版权声明:本文为博主原创文章,未经博主允许不得转载. 项目常常需要有访问共享文件夹的需求,例如共享文件夹存储照片.文件等.那么如何使用Java读写Windows共享文件夹呢? Java可以使用JCIF ...
- Java DOM4J读取XML
DOM4J是dom4j.org出品的一个开源XML解析包.Dom4j是一个易用的.开源的库,用于XML,XPath和XSLT.它应用于Java平台,採用了Java集合框架并全然支持DOM,SAX和JA ...
- 深入浅出Java Dom4j读取XML
在以前自己使用的xml较少,只是了解其很强大,现在可算是在DRP中,真正的开始使用它了,以前只是简单的理解xml,xml即可扩展标记语言,简单的使用,具体是什么?怎么用?还是一直让自己期待的. 首先来 ...
- JAXB java类与xml互转
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...
- Java学习02-web.xml配置详解
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...
- GeoJson的生成与解析,JSON解析,Java读写geojson,geotools读取shp文件,Geotools中Geometry对象与GeoJson的相互转换
GeoJson的生成与解析 一.wkt格式的geometry转成json格式 二.json格式转wkt格式 三.json格式的数据进行解析 四.Java读写geojson 五.geotools读取sh ...
- JAXB—Java类与XML文件之间转换
JAXB-Java类与XML文件之间转换 简介 JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生 ...
- 【解决方案】cvc-complex-type.2.4.a: Invalid content was found starting with element 'init-param'. One of '{"http://java.sun.com/xml/ns/javaee":run-as, "http://java.sun.com/xml/ns/javaee":security-role-r
[JAVA错误] cvc-complex-type.2.4.a: Invalid content was found starting with element 'init-param'. One o ...
- 通过JAXB完成Java对象与XML之间的转换
Java对象转换XML的过程叫marshal. XML转换到Java对象的过程叫unmarshal. 一.Java对象转化为XML 这里省略getter和setter方法 通过标注@XMLRootEl ...
随机推荐
- 个人所得税计算java版
年关将至,该到了发年终奖的时候了.所以就到网上去找下,个税计算器,但是发现做的有点像病毒网站似的.所以计算结果也不太敢信,于是琢磨着,要不自己动手写一个个税计算器吧. 说干就干,先上国家税务局了解了下 ...
- SQLite metadata
http://www.devart.com/dotconnect/sqlite/docs/MetaData.html https://github.com/sqlitebrowser/sqlitebr ...
- 搞懂WebSocket原理
一.websocket与http WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算) 首先HTTP有 1 ...
- Python3.7安装Geenlet
1.首先再python文件下的Scripts文件夹下有这几个文件: 2.打开Scripts文件夹下可能你会发现是空的,这时候就要先安装setuptools了,安装完后Script文件下就出现上图的文件 ...
- visual studio 2015通过附加进程调试wcf服务
网站: 打开wcf服务所在的项目 然后调用iis上部署的HLFC(crm)项目的接口就可以进行调试 注意 WCF服务项目要以管理员身份打开,调用wcf服务的项目要在iis中部署并点击调用后才能在附加到 ...
- [算法练习]Add Two Numbers
题目说明: You are given two linked lists representing two non-negative numbers. The digits are stored in ...
- Event percentages解析
Event percentages: 0:--pct-touch//touch events percentage触摸事件百分比(触摸事件是一个在屏幕单一位置的按下-抬起事件) 1:--pct-mot ...
- C语言中关键词static的用法与作用域
一.面向过程设计中的static 转载:http://blog.csdn.net/celerylxq/article/details/6160499 1.静态全局变量 在全局变量前,加上关键字stat ...
- 毕向东_Java基础视频教程第19天_IO流(18~19)
第19天-18-IO流(流操作规律 - 1) 通过三个步骤来明确"流操作"的规律: 明确数据流的"源和目的" 源, 输入流: InputStream/Reade ...
- css网页中设置背景图片的方法详解
在css代码中设置背景图片的方法,包括背景图片.背景重复.背景固定.背景定位等 用css设置网页中的背景图片,主要有如下几个属性: 1,背景颜色 {">说明:参数取值和颜色属性一样 ...