Java解析XML

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:
由于需要对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());
        }
    }

}

本文转自博客园执着的笨蛋的博客,原文链接:Java解析XML,如需转载请自行联系原博主。

目录
相关文章
|
1天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
7天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
3天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
5天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
9天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
11天前
|
C# 开发者 Windows
震撼发布:全面解析WPF中的打印功能——从基础设置到高级定制,带你一步步实现直接打印文档的完整流程,让你的WPF应用程序瞬间升级,掌握这一技能,轻松应对各种打印需求,彻底告别打印难题!
【8月更文挑战第31天】打印功能在许多WPF应用中不可或缺,尤其在需要生成纸质文档时。WPF提供了强大的打印支持,通过`PrintDialog`等类简化了打印集成。本文将详细介绍如何在WPF应用中实现直接打印文档的功能,并通过具体示例代码展示其实现过程。
43 0
|
11天前
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
28 0
|
11天前
|
C# 前端开发 UED
WPF数据验证实战:内置控件与自定义规则,带你玩转前端数据验证,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,数据验证是确保输入正确性的关键环节。前端验证能及时发现错误,提升用户体验和程序可靠性。本文对比了几种常用的WPF数据验证方法,并通过示例展示了如何使用内置验证控件(如`TextBox`)及自定义验证规则实现有效验证。内置控件结合`Validation`类可快速实现简单验证;自定义规则则提供了更灵活的复杂逻辑支持。希望本文能帮助开发者更好地进行WPF数据验证。
29 0
|
26天前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
3月前
|
XML Java 数据格式
java创建xml文件内容
java创建xml文件内容

热门文章

最新文章

推荐镜像

更多
下一篇
DDNS