简单的XML文档读取

时间:2022-11-10 12:04:45

XML文档读取

前辈叫我帮忙写一个简单的读取XML的工具类,不需要太复杂,一个根节点,一层子节点,无节点属性

package com.pro0729;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.Map;

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.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
* @moudle: 读取简单XML文件工具类
* @version:v1.0
* @Description:
<root>
<element1>value1</element1>
<element2>value2</element2>
<element3>value3</element3>
<element4>value4</element4>
</root>
* @author: xukai
* @date: 2016年9月14日 上午11:12:36
*
*/
public class ReadSimpleXmlUtil {

// 读取文件路径
public final static String XML_PATH = "C:/Users/hcc/Desktop/config.txt";
// 创建工厂
public static DocumentBuilderFactory factory;
// 建造器
public static DocumentBuilder builder;
// XML文档
public static Document doc;

static {
try {
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
// 创建文件输入流,目标文件
InputStream fis = new FileInputStream(XML_PATH);
doc = builder.parse(fis);
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
try {
Map<String, String> map = readXml();
System.out.println(map);
modifyXml("book", "1003");
map = readXml();
System.out.println(map);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
*
* <p>Title: 读取整个XML文档</p>
* <p>author : xukai</p>
* <p>date : 2016年9月14日 下午2:18:30</p>
* @return Map<Key,Value>
* @throws Exception
*/
public static Map<String, String> readXml() throws Exception {
Map<String, String> map = new LinkedHashMap<String, String>();
// 获取文档的根节点
Element root = doc.getDocumentElement();
NodeList rootchilds = root.getChildNodes();
for (int j = 0; j < rootchilds.getLength(); j++) {
// 判断当前节点是否为元素节点
if (rootchilds.item(j).getNodeType() == Node.ELEMENT_NODE) {
Element ele = (Element) rootchilds.item(j);
String name = ele.getNodeName();
// 获取第一个字节点的值
String value = ele.getTextContent();
map.put(name, value);
}
}
return map;
}

/**
*
* <p>Title: 修改XML</p>
* <p>author : xukai</p>
* <p>date : 2016年9月14日 下午2:32:38</p>
* @param 节点名
* @param 节点文本
* @throws Exception
*/
public static void modifyXml(String name, String value) throws Exception {
NodeList nodeList = doc.getElementsByTagName(name);
if (nodeList.getLength() == 0) {
throw new RuntimeException("没有找到该节点");
}
for (int j = 0; j < nodeList.getLength(); j++) {
// 判断当前节点是否为元素节点
if (nodeList.item(j).getNodeType() == Node.ELEMENT_NODE) {
Element ele = (Element) nodeList.item(j);
ele.setTextContent(value);
}
}
TransformerFactory factory = TransformerFactory.newInstance();
Transformer former = factory.newTransformer();
// 写出修改之后的document
former.transform(new DOMSource(doc), new StreamResult(new File(XML_PATH)));
}

}


XML文档的格式:

<root> 
<element1>value1</element1> 
<element2>value2</element2>
<element3>value3</element3> 
<element4>value4</element4>    
</root>

华丽的分割线

一直想写一个关于应届毕业生刚踏入职场的感受吧,一直没有时间写,十一放假回家,一定要整理出来。有很多东西想说,毕业的不舍与遗憾、身份的转变、职场的感受,还有很多想说,未完待续....