前言
xml文件是大家熟知的配置文件,我们当然可以通过java来对其创建删改查,比如说生成一个这
一、方法
1.创建文件
接下来我们模拟创建一个pom文件中的依赖
/**
* 创建XML文档
*/
public static void createXML(String filePath) throws Exception {
// 创建Document对象
Document document = DocumentHelper.createDocument();
// 创建节点,首节点默认为根节点
Element rootElement = document.addElement("project");
Element parentElement = rootElement.addElement("parent");
parentElement.addComment("版本号");
Element groupIdElement = parentElement.addElement("groupId");
Element artifactIdElement = parentElement.addElement("artifactId");
Element versionElement = parentElement.addElement("version");
// 设置节点内容
groupIdElement.setText("org.apache.poi");
artifactIdElement.setText("poi-excelant");
versionElement.setText("3.14");
// 设置输出编码
OutputFormat format = OutputFormat.createPrettyPrint();
File xmlFile = new File(filePath);
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFile), format);
writer.write(document);
writer.close();
}
1.修改节点和内容
我们可以尝试着修改一下版本号
/**
* 更新节点
*/
public static void updateXML(String filePath) throws Exception {
Document document = getDocument(filePath);
if (document != null) {
// 修改指定节点
List elementList = document.selectNodes("/project/parent/version");
Iterator iterator = elementList.iterator();
while (iterator.hasNext()) {
Element element = (Element) iterator.next();
element.setText("3.16");
}
//设置输出编码
OutputFormat format = OutputFormat.createPrettyPrint();
File xmlFile = new File(filePath);
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFile), format);
writer.write(document);
writer.close();
}
}
3.删除节点
代码如下(示例):
/**
* 删除节点
*/
public static void removeElement(String filePath) throws Exception {
Document document = getDocument(filePath);
if (document != null) {
// 修改指定节点
List elementList = document.selectNodes("/project/parent");
Iterator iterator = elementList.iterator();
while (iterator.hasNext()) {
Element parentElement = (Element) iterator.next();
Iterator parentIterator = parentElement.elementIterator();
while (parentIterator.hasNext()) {
Element childElement = (Element) parentIterator.next();
if (childElement.getName().equals("version")) {
parentElement.remove(childElement);
}
}
}
//设置输出编码
OutputFormat format = OutputFormat.createPrettyPrint();
File xmlFile = new File(filePath);
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFile), format);
writer.write(document);
writer.close();
}
}
4.新增节点
代码如下(示例):
/**
* 新增节点
*/
public static void addElement(String filePath) throws Exception {
Document document = getDocument(filePath);
if (document != null) {
// 修改指定节点
List elementList = document.selectNodes("/project/parent");
Iterator iterator = elementList.iterator();
while (iterator.hasNext()) {
Element parentElement = (Element) iterator.next();
Iterator parentIterator = parentElement.elementIterator();
List<String> nodeList = new ArrayList<>();
while (parentIterator.hasNext()) {
Element childElement = (Element) parentIterator.next();
nodeList.add(childElement.getName());
}
if (!nodeList.contains("version")){
Element versionElement = parentElement.addElement("version");
versionElement.setText("1.1");
break;
}
}
//设置输出编码
OutputFormat format = OutputFormat.createPrettyPrint();
File xmlFile = new File(filePath);
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFile), format);
writer.write(document);
writer.close();
}
}
5.获取遍历
代码如下(示例):
/**
* 获取文档
*/
public static Document getDocument(String filename) {
File xmlFile = new File(filename);
Document document = null;
if (xmlFile.exists()) {
try {
SAXReader saxReader = new SAXReader();
document = saxReader.read(xmlFile);
} catch (Exception e) {
e.printStackTrace();
}
}
return document;
}
/**
* 遍历根节点
*/
public static Document iteratorNode(String filename) {
Document document = getDocument(filename);
if (document != null) {
Element root = document.getRootElement();
System.out.println(root.getName());
Iterator iterator = root.elementIterator();
while (iterator.hasNext()) {
Element childElement1 = (Element) iterator.next();
System.out.println("\t-"+childElement1.getName());
Iterator iterator1 = childElement1.elementIterator();
while (iterator1.hasNext()){
Element childElement2 = (Element) iterator1.next();
System.out.println("\t\t-"+childElement2.getName());
}
}
}
return document;
}
测试
然后我们来输出一下信息
public static void main(String[] args) throws Exception {
String file = "D:\\test.xml";
// createXML(file);
// updateXML(file);
// removeElement(file);
// addElement(file);
Document d = iteratorNode(file);
System.out.println(d);
}