dom 修改xml java_如何使用DOM方式修改XML文件内容

如何使用DOM方式修改XML文件内容

发布时间:2020-07-09 15:23:57

来源:亿速云

阅读:125

作者:Leah

本篇文章为大家展示了如何使用DOM方式修改XML文件内容,代码简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

DOM解析方式也可用于修改XML数据,我们可以使用它完成新增元素、删除元素、修改元素值、修改元素属性等操作。

我们的XML文件,内容如下:

employee.xml<?xml version="1.0" encoding="UTF-8" standalone="no"?>

Pankaj

29

Java Developer

Male

Lisa

35

CSS Developer

Female

我们将修改XML文件的内容:

1.根据员工的性别(gender)修改”id”属性值,性别为男(Male)的id属性值中追加”M”,为女(Female)的id属性值追加”F”。

2.修改name元素的值,全部变成大写。

3.”gender”元素已经没有存在的意义了,我们删除它。

4.在employee节点下新增一个”salary”节点。

当我们完成上述操作后,将内容保存在一个新的xml文件中。

下面是使用DOM方式解析的Java程序代码:

ModifyXMLDOM.javapackage 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

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

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

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

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"?>

PANKAJ

29

Java Developer

10000

LISA

35

CSS Developer

10000

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值