zoukankan      html  css  js  c++  java
  • 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());
            }
        }
  • 相关阅读:
    缩放图片
    Volley下载图片存放在data/data下 networkImageView lrucache
    类实现Parcelable接口在Intent中传递
    基本控件设置边角图片 drawableleft
    屏幕全屏之类的问题
    关于点击按钮分享
    万能适配器的一些问题
    自定义控件高级
    Fragment 生命周期 全局变量的声明位置
    GridView
  • 原文地址:https://www.cnblogs.com/licheng/p/1128368.html
Copyright © 2011-2022 走看看