Java解析XML
Java解析XML
由于需要对XML文件进行操作。所以上网找了一此资料。
用了一下org.w3c.dom解析,不太方便,特别是进行修改时。
后来找到了dom4j这个工具包。方便多了。呵。。记录一下,以后用得着。
首先通过org.w3c.dom解析
InitFromXML.java
package system.init;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
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;
/**
* @author yymoth
*
*/
public class InitFromXML {
private HashMap prop = new HashMap(); //存储从文件中读取的所有配置信息
private HashMap temp = new HashMap(); //传入的参数,用来生成新的XML配置文件
private static String xmlFileName ="SystemInit.xml";
private static String xmlFilePath = InitFromXML.class.getClassLoader().getResource(xmlFileName).getPath();
private static InitFromXML instance = null;
public static synchronized InitFromXML getInstance()
{
if(instance == null)
{ instance = new InitFromXML(); }
return instance;
}
/**
*
*/
public InitFromXML() {
super();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new InitFromXML().getSystemProperty();
HashMap temp = new HashMap();
temp.put("outputImageDevice","outputImageDeviceVVVVV");
temp.put("inputSceneFilePath","inputSceneFilePathVVVVV");
temp.put("fetchIRADFactor",0.11);
temp.put("fcpr_upLimit",111);
new InitFromXML().updateSystemProperty(temp);
}
/**
* 把xml文件读取内容,在内存中产生dom树; 修改它的内容不会影响文件;
* @return
*/
public HashMap getSystemProperty()
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;
try {
db = dbf.newDocumentBuilder();
System.out.println("开始读取配置文件= " + xmlFilePath);
Document d = db.parse(xmlFilePath);
NodeList nl = d.getElementsByTagName("outputImageDevice");
Node mynode = nl.item(0);
String outputImageDevice = mynode.getFirstChild().getNodeValue();
prop.put("outputImageDevice",outputImageDevice);
System.out.println("输出路径= "+prop.get("outputImageDevice").toString());
nl = d.getElementsByTagName("inputSceneFilePath");
mynode = nl.item(0);
String inputSceneFilePath = mynode.getFirstChild().getNodeValue();
prop.put("inputSceneFilePath",inputSceneFilePath);
System.out.println("输入场景路径= "+prop.get("inputSceneFilePath"));
nl = d.getElementsByTagName("fetchIRADFactor");
mynode = nl.item(0);
String fetchIRADFactor= mynode.getFirstChild().getNodeValue();
prop.put("fetchIRADFactor",fetchIRADFactor);
System.out.println("空闲Render选择因子= "+prop.get("fetchIRADFactor"));
nl = d.getElementsByTagName("fcpr_upLimit");
mynode = nl.item(0);
int fcpr_upLimit = Integer.parseInt(mynode.getFirstChild().getNodeValue().toString().trim());
prop.put("fcpr_upLimit",fcpr_upLimit);
System.out.println("单台Render最大渲染帧数= "+prop.get("fcpr_upLimit"));
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return this.prop;
}
/**
* 更新系统参数
*
*/
public void updateSystemProperty(HashMap temp)
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
Document doc = db.parse(xmlFilePath);
NodeList nl = doc.getElementsByTagName("outputImageDevice");
Node mynode = nl.item(0);
mynode.setTextContent((String)temp.get("outputImageDevice"));
//mynode.setNodeValue((String)temp.get("outputImageDevice"));
nl = doc.getElementsByTagName("inputSceneFilePath");
mynode = nl.item(0);
mynode.setTextContent((String)temp.get("inputSceneFilePath"));
nl = doc.getElementsByTagName("fetchIRADFactor");
mynode = nl.item(0);
mynode.setTextContent((String)temp.get("fetchIRADFactor"));
nl = doc.getElementsByTagName("fcpr_upLimit");
mynode = nl.item(0);
mynode.setTextContent((String)temp.get("fcpr_upLimit"));
writeToXML(doc);
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 把Document对象生成文件;
* @param doc
*/
public void writeToXML(Document doc)
{
TransformerFactory tfactory = TransformerFactory.newInstance();
try {
Transformer tf = tfactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(xmlFilePath));
tf.transform(source,result);
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
下面这个是通过DOM4J, 使用之前要下载dom4j包。官方站点:www.dom4j.org
Dom4j.java
package wcrs_master.test;
/**
* @author yymoth
*
*/
import java.io.IOException;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.Attribute;
import system.init.InitFromXML;
import java.io.FileWriter;
public class Dom4j {
private static String xmlFileName ="SystemInit.xml";
private static String xmlFilePath = Dom4j.class.getClassLoader().getResource(xmlFileName).getPath();
private static Dom4j instance = null;
public Dom4j() {
}
public static synchronized Dom4j getInstance()
{
if(instance == null)
{ instance = new Dom4j(); }
return instance;
}
public Document parse(String sfile) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(new File(sfile));
return document;
}
public void update(HashMap temp) throws IOException {
Document document = null;
try {
document = new Dom4j().parse(xmlFilePath);
Element root = document.getRootElement(); //得到根节点目录
Iterator iter = root.elementIterator();
System.out.println("\r\n****** 获取的数据如下 ******");
System.out.println(xmlFilePath);
while (iter.hasNext()) {
Element titleElement = (Element) iter.next();
// 修改xml元素
System.out.print(titleElement.getName()+" == ");
System.out.println(titleElement.getData().toString());
if (titleElement.getName().equals("outputImageDevice")) {
titleElement.setText(temp.get("outputImageDevice").toString());
}
if (titleElement.getName().equals("fetchIRADFactor")) {
titleElement.setText(temp.get("fetchIRADFactor").toString());
}
if (titleElement.getName().equals("inputSceneFilePath")) {
titleElement.setText(temp.get("inputSceneFilePath").toString());
}
if (titleElement.getName().equals("fcpr_upLimit")) {
titleElement.setText(temp.get("fcpr_upLimit").toString());
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
writeToXML(document);
}
/**
* 把xml文件读取内容,在内存中产生dom树; 修改它的内容不会影响文件;
* @return
*/
public HashMap getSystemProperty()
{
HashMap temp = new HashMap();
Document document ;
try {
document = new Dom4j().parse(xmlFilePath);
Element root = document.getRootElement(); //得到根节点目录
Iterator iter = root.elementIterator();
while(iter.hasNext())
{
Element titleElement = (Element) iter.next();
temp.put(titleElement.getName(),titleElement.getData());
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return temp;
}
/**
* 写入文件
* @param document
*/
public void writeToXML(Document document)
{
// 输出全部原始数据,在编译器中显示
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer;
try {
writer = new XMLWriter(System.out, format);
//System.out.println("\r\n------------------Start------------------");
writer.write(document);
//System.out.println("\r\n-------------------End-------------------");
writer.close();
// 输出全部原始数据,并用它生成新的我们需要的XML文件
XMLWriter writer2 = new XMLWriter(new FileWriter(new File(
xmlFilePath)), format);
writer2.write(document); //输出到文件
writer2.close();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
HashMap temp = new HashMap();
temp.put("outputImageDevice","outputImageDeviceVVVVV");
temp.put("inputSceneFilePath","inputSceneFilePathVVVVV");
temp.put("fetchIRADFactor",0.11);
temp.put("fcpr_upLimit",11);
Dom4j dom4j = new Dom4j();
try {
dom4j.update(temp);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
用了一下org.w3c.dom解析,不太方便,特别是进行修改时。
后来找到了dom4j这个工具包。方便多了。呵。。记录一下,以后用得着。
首先通过org.w3c.dom解析
InitFromXML.java
package system.init;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
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;
/**
* @author yymoth
*
*/
public class InitFromXML {
private HashMap prop = new HashMap(); //存储从文件中读取的所有配置信息
private HashMap temp = new HashMap(); //传入的参数,用来生成新的XML配置文件
private static String xmlFileName ="SystemInit.xml";
private static String xmlFilePath = InitFromXML.class.getClassLoader().getResource(xmlFileName).getPath();
private static InitFromXML instance = null;
public static synchronized InitFromXML getInstance()
{
if(instance == null)
{ instance = new InitFromXML(); }
return instance;
}
/**
*
*/
public InitFromXML() {
super();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new InitFromXML().getSystemProperty();
HashMap temp = new HashMap();
temp.put("outputImageDevice","outputImageDeviceVVVVV");
temp.put("inputSceneFilePath","inputSceneFilePathVVVVV");
temp.put("fetchIRADFactor",0.11);
temp.put("fcpr_upLimit",111);
new InitFromXML().updateSystemProperty(temp);
}
/**
* 把xml文件读取内容,在内存中产生dom树; 修改它的内容不会影响文件;
* @return
*/
public HashMap getSystemProperty()
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;
try {
db = dbf.newDocumentBuilder();
System.out.println("开始读取配置文件= " + xmlFilePath);
Document d = db.parse(xmlFilePath);
NodeList nl = d.getElementsByTagName("outputImageDevice");
Node mynode = nl.item(0);
String outputImageDevice = mynode.getFirstChild().getNodeValue();
prop.put("outputImageDevice",outputImageDevice);
System.out.println("输出路径= "+prop.get("outputImageDevice").toString());
nl = d.getElementsByTagName("inputSceneFilePath");
mynode = nl.item(0);
String inputSceneFilePath = mynode.getFirstChild().getNodeValue();
prop.put("inputSceneFilePath",inputSceneFilePath);
System.out.println("输入场景路径= "+prop.get("inputSceneFilePath"));
nl = d.getElementsByTagName("fetchIRADFactor");
mynode = nl.item(0);
String fetchIRADFactor= mynode.getFirstChild().getNodeValue();
prop.put("fetchIRADFactor",fetchIRADFactor);
System.out.println("空闲Render选择因子= "+prop.get("fetchIRADFactor"));
nl = d.getElementsByTagName("fcpr_upLimit");
mynode = nl.item(0);
int fcpr_upLimit = Integer.parseInt(mynode.getFirstChild().getNodeValue().toString().trim());
prop.put("fcpr_upLimit",fcpr_upLimit);
System.out.println("单台Render最大渲染帧数= "+prop.get("fcpr_upLimit"));
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return this.prop;
}
/**
* 更新系统参数
*
*/
public void updateSystemProperty(HashMap temp)
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
Document doc = db.parse(xmlFilePath);
NodeList nl = doc.getElementsByTagName("outputImageDevice");
Node mynode = nl.item(0);
mynode.setTextContent((String)temp.get("outputImageDevice"));
//mynode.setNodeValue((String)temp.get("outputImageDevice"));
nl = doc.getElementsByTagName("inputSceneFilePath");
mynode = nl.item(0);
mynode.setTextContent((String)temp.get("inputSceneFilePath"));
nl = doc.getElementsByTagName("fetchIRADFactor");
mynode = nl.item(0);
mynode.setTextContent((String)temp.get("fetchIRADFactor"));
nl = doc.getElementsByTagName("fcpr_upLimit");
mynode = nl.item(0);
mynode.setTextContent((String)temp.get("fcpr_upLimit"));
writeToXML(doc);
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 把Document对象生成文件;
* @param doc
*/
public void writeToXML(Document doc)
{
TransformerFactory tfactory = TransformerFactory.newInstance();
try {
Transformer tf = tfactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(xmlFilePath));
tf.transform(source,result);
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
下面这个是通过DOM4J, 使用之前要下载dom4j包。官方站点:www.dom4j.org
Dom4j.java
package wcrs_master.test;
/**
* @author yymoth
*
*/
import java.io.IOException;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.Attribute;
import system.init.InitFromXML;
import java.io.FileWriter;
public class Dom4j {
private static String xmlFileName ="SystemInit.xml";
private static String xmlFilePath = Dom4j.class.getClassLoader().getResource(xmlFileName).getPath();
private static Dom4j instance = null;
public Dom4j() {
}
public static synchronized Dom4j getInstance()
{
if(instance == null)
{ instance = new Dom4j(); }
return instance;
}
public Document parse(String sfile) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(new File(sfile));
return document;
}
public void update(HashMap temp) throws IOException {
Document document = null;
try {
document = new Dom4j().parse(xmlFilePath);
Element root = document.getRootElement(); //得到根节点目录
Iterator iter = root.elementIterator();
System.out.println("\r\n****** 获取的数据如下 ******");
System.out.println(xmlFilePath);
while (iter.hasNext()) {
Element titleElement = (Element) iter.next();
// 修改xml元素
System.out.print(titleElement.getName()+" == ");
System.out.println(titleElement.getData().toString());
if (titleElement.getName().equals("outputImageDevice")) {
titleElement.setText(temp.get("outputImageDevice").toString());
}
if (titleElement.getName().equals("fetchIRADFactor")) {
titleElement.setText(temp.get("fetchIRADFactor").toString());
}
if (titleElement.getName().equals("inputSceneFilePath")) {
titleElement.setText(temp.get("inputSceneFilePath").toString());
}
if (titleElement.getName().equals("fcpr_upLimit")) {
titleElement.setText(temp.get("fcpr_upLimit").toString());
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
writeToXML(document);
}
/**
* 把xml文件读取内容,在内存中产生dom树; 修改它的内容不会影响文件;
* @return
*/
public HashMap getSystemProperty()
{
HashMap temp = new HashMap();
Document document ;
try {
document = new Dom4j().parse(xmlFilePath);
Element root = document.getRootElement(); //得到根节点目录
Iterator iter = root.elementIterator();
while(iter.hasNext())
{
Element titleElement = (Element) iter.next();
temp.put(titleElement.getName(),titleElement.getData());
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return temp;
}
/**
* 写入文件
* @param document
*/
public void writeToXML(Document document)
{
// 输出全部原始数据,在编译器中显示
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer;
try {
writer = new XMLWriter(System.out, format);
//System.out.println("\r\n------------------Start------------------");
writer.write(document);
//System.out.println("\r\n-------------------End-------------------");
writer.close();
// 输出全部原始数据,并用它生成新的我们需要的XML文件
XMLWriter writer2 = new XMLWriter(new FileWriter(new File(
xmlFilePath)), format);
writer2.write(document); //输出到文件
writer2.close();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
HashMap temp = new HashMap();
temp.put("outputImageDevice","outputImageDeviceVVVVV");
temp.put("inputSceneFilePath","inputSceneFilePathVVVVV");
temp.put("fetchIRADFactor",0.11);
temp.put("fcpr_upLimit",11);
Dom4j dom4j = new Dom4j();
try {
dom4j.update(temp);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}