我现在需要一个接口来修改xml文件中的一些系统配置,使得这些被指信息可以不用由程序员事先设定,那这样的接口要怎样写呢?我在网上找了下面这个例子。
001
import java.io.FileInputStream;
002
import java.io.FileNotFoundException;
003
import java.io.FileOutputStream;
004
import java.io.IOException;
005
import java.io.InputStream;
006
import javax.xml.parsers.*;
007
import javax.xml.transform.Transformer;
008
import javax.xml.transform.TransformerException;
009
import javax.xml.transform.TransformerFactory;
010
import javax.xml.transform.dom.DOMSource;
011
import javax.xml.transform.stream.StreamResult;
012
import org.w3c.dom.*;
013
import org.xml.sax.*;
014
public class XmlModifier {
015
016
017
public XmlModifier() {
018
DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();//定义一个XML文件的解析器
019
try {
020
DocumentBuilder dombuilder = domfac.newDocumentBuilder();//定义一个API来获取XML文件
021
InputStream is = new FileInputStream("assets/XMLConfig.xml");
022
//文档
023
Document doc = dombuilder.parse(is);//解析来自InputStream的文件,创建为doc文件树
024
//根节点
025
Element root = doc.getDocumentElement();
026
//根下的子节点
027
NodeList books = root.getChildNodes();
028
if (books != null) {
029
for (int i = 0; i < books.getLength(); i++) {
030
Node book = books.item(i);
031
if (book.getNodeType() == Node.ELEMENT_NODE) {
032
String MAP = book.getAttributes().getNamedItem("MAP").getNodeValue();
033
System.out.println(MAP);
034
//子节点的子节点
035
for (Node node = book.getFirstChild(); node != null; node = node.getNextSibling()) {
036
if (node.getNodeType() == Node.ELEMENT_NODE) {
037
if (node.getNodeName() == "LOCATIONMETHOD") {
038
//String name = node.getNodeValue();
039
String LocationMethod = node.getFirstChild().getNodeValue();
040
//System.out.println(name);
041
System.out.println(LocationMethod);
042
node.setTextContent("GPRS");
043
}
044
if (node.getNodeName() == "DOUBLECLCKZOOM") {
045
String DoubleClickZoom = node.getFirstChild().getNodeValue();
046
System.out.println(DoubleClickZoom);
047
048
//修改字段
049
node.setTextContent("false");
050
}
051
if(node.getNodeName()=="UPDATEPOSIONTIME"){
052
String UpDatePositionTime = node.getFirstChild().getNodeValue();
053
System.out.println(UpDatePositionTime);
054
node.setTextContent("5");
055
}
056
}
057
}
058
}
059
}
060
061
//保存文件作用
062
writeXML(doc, "NewFile.xml");
063
064
}
065
} catch (ParserConfigurationException e) {
066
// TODO: handle exception
067
e.printStackTrace();
068
//System.out.println("解析错误");
069
} catch (FileNotFoundException e) {
070
e.printStackTrace();
071
//System.out.println("文件查找失败");
072
} catch (SAXException e) {
073
e.printStackTrace();
074
//System.out.println("接口错误");
075
} catch (IOException e) {
076
e.printStackTrace();
077
//System.out.println("输入/输出错误");
078
}
079
}
080
/**
081
* @param args
082
083
public static void main(String[] args) {
084
// TODO Auto-generated method stub
085
new XmlModifier();
086
}
087
//保存新的Document
088
private static void writeXML(Document doc, String file) {
089
try {
090
Transformer t = TransformerFactory.newInstance().newTransformer();
091
t.setOutputProperty("indent", "yes");
092
t.transform(new DOMSource(doc), new StreamResult(newFileOutputStream(file)));
093
} catch (TransformerException e) {
094
e.printStackTrace();
095
} catch (FileNotFoundException e) {
096
e.printStackTrace();
097
}
098
}
099
//创建新Document
100
private static void newDocument(DocumentBuilder db) throws SAXException, IOException {
101
Document doc = db.newDocument();
102
Element root = doc.createElement("root");
103
doc.appendChild(root);
104
root.appendChild(doc.createElement("new"));
105
writeXML(doc, "new.xml");
106
}
107
}
但是运行时Console报错:
#
# A fatal error has been detected by the Java Runtime Environment:
#
#Internal Error (classFileParser.cpp:3494), pid=4108, tid=4612
#Error: ShouldNotReachHere()
#
# JRE version: 6.0_25-b06
# Java VM: Java HotSpot(TM) Client VM (20.0-b11 mixed mode windows-x86 )
# An error report file with more information is saved as:
# D:\AndroidWork\XmlConfigReader_Writer\hs_err_pid4108.log
#
# If you would like to submit a bug report, please visit:
#http://java.sun.com/webapps/bugreport/crash.jsp
#
请大家指教。
XMLConfig.xml文件如下:
1
<?xml version="1.0" encoding="utf-8" ?>
2
3
<MAP>
4
<LOCATIONMETHOD>ID</LOCATIONMETHOD>
5
<DOUBLECLICKZOOM>true</DOUBLECLICKZOOM>
6
<UPDATEPOSITIONTIME>1</UPDATEPOSITIONTIME>
7
</MAP>