您的位置:首页 > 编程语言 > Java开发

Java&Xml教程(三)使用DOM方式修改XML文件内容

2015-12-09 19:57 609 查看
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>


原文地址:http://www.journaldev.com/901/how-to-edit-xml-file-in-java-dom-parser
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: