xml文件解析

来源:互联网 发布:淘宝 导航 css居中 编辑:程序博客网 时间:2024/05/17 02:51

写了一xml文件解析和制作的代码,方便以后的使用

package com.produce;

import java.awt.List;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.Format;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
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.Attr;
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;

import Jbdc.MyDal;

import com.xml.Dao.xmlData;

public class produceXML {

    private static Document document;

    public void init() {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            document = builder.newDocument();
        } catch (ParserConfigurationException e) {
            System.out.println(e.getMessage());
        }
    }

    public void createXml(ArrayList list) {
        init();
        Element root = document.createElement("configs"); // 创建根节点名字可变
        document.appendChild(root);
        Element number = document.createElement("number"); // 创建根节点名字可变
        /* 创建一个完成的节点,start */
        for (int i = 0; i < list.size(); i++) {
            xmlData data = (xmlData) list.get(i);
            Element item = document.createElement("item");
            Attr name = document.createAttribute("name");
            item.setAttribute("name", "Name"); // 增加属性的另一种方法
            item.appendChild(document.createTextNode(data.getDataName()));
            number.appendChild(item);

            Element item1 = document.createElement("item");
            Attr name1 = document.createAttribute("name");
            item1.setAttribute("name", "Number"); // 增加属性的另一种方法
            item1.appendChild(document.createTextNode(data.getID()));
            number.appendChild(item1);
            root.appendChild(number);

        }
        // 将DOM对象document写入到xml文件中
        TransformerFactory tf = TransformerFactory.newInstance();
        try {
            Transformer transformer = tf.newTransformer();
            DOMSource source = new DOMSource(document);
            transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            PrintWriter pw = new PrintWriter(new FileOutputStream("xml数据记录"));
            StreamResult result = new StreamResult(pw);
            transformer.transform(source, result); // 关键转换
            System.out.println("生成XML文件成功!");
        } catch (TransformerConfigurationException e) {
            System.out.println(e.getMessage());
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        } catch (TransformerException e) {
            System.out.println(e.getMessage());
        }
    }

    /*
     * 解析xml文件
     *
     * @return 返回一个链表 如果链表为空创建xml文件
     */
    public ArrayList<xmlData> parserXml() {
        try {
            String name = null;
            String number = null;
            ArrayList<xmlData> list = new ArrayList<xmlData>();
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document document = db.parse("xml数据记录");
            NodeList employees = document.getChildNodes();
            for (int i = 0; i < employees.getLength(); i++) {
                Node employee = employees.item(i);
                NodeList employeeInfo = employee.getChildNodes();
                for (int j = 0; j < employeeInfo.getLength(); j++) {
                    Node node = employeeInfo.item(j);
                    NodeList employeeMeta = node.getChildNodes();
                    for (int k = 0; k < employeeMeta.getLength(); k += 1) {
                        xmlData xmldata = new xmlData();
                        if (k % 2 == 1) {
                            if (name == null) {
                                name = employeeMeta.item(k).getTextContent();
                            } else {
                                number = employeeMeta.item(k).getTextContent();
                                xmldata.setDataName(name);
                                xmldata.setID(number);
                                list.add(xmldata);
                                System.out.println("name:" + name + ";"
                                        + "number:" + number);
                                name = null;
                            }
                        }
                    }
                }
            }
            System.out.println("解析完毕");
            return list;
        } catch (FileNotFoundException e) {
            produceXML j2x = new produceXML();
            try {
                j2x.buildxml();
            } catch (SQLException e1) {
                
                e1.printStackTrace();
            }
            return null;
        } catch (ParserConfigurationException e) {
            System.out.println(e.getMessage());
        } catch (SAXException e) {
            System.out.println(e.getMessage());
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        return null;
    }

    /*
     * xml中查询数据
     *
     * @return <0 说明存在或者表中没有该项数据 ; >0返回上次读取数字ID
     */
    public String findnumber(String dataname) {
        String number = "-1";
        produceXML j2x = new produceXML();
        ArrayList<xmlData> list = j2x.parserXml();
        if (list != null) {
            for (int i = 0; i < list.size(); i++) {
                xmlData item = list.get(i);
                if (dataname.equals(item.getDataName())) {
                    number = item.getID();
                    break;
                }
            }
        }
        return number;
    }


    /*
     * 创建初始化xml文件
     */
    public void buildxml() throws SQLException {
        produceXML j2x = new produceXML();
        MyDal dbsql = new MyDal();
        xmlData data=null;
        ArrayList<xmlData> list2 = new ArrayList<xmlData>();
        String[] list = { "leadership", "tyst", "jgjj", "jgzn", "gzgz", "flfg",
                "tsff", "xzsyxsf", "zfxjj", "xzsp", "busiess", "zfwnrbz",
                "zxfw", "bjxxfb", "btffxx", "dqgk", "lxfs", "zxjbszn" };
        for (int i = 0; i < list.length; i++) {
            data=new xmlData();
            data.setDataName(list[i]);
            String sql = j2x.sql(i);
            System.out.println(list[i]+":"+sql);
            ResultSet rs = dbsql.Query(sql);
            boolean b = rs.last();
            if (b) {
                data.setID(rs.getString(1));
            }else{
                data.setID("0");
            }
            list2.add(data);
        }
        createXml(list2);
    }

    public static void main(String[] args) {
        try {
            produceXML j2x = new produceXML();
            ArrayList<xmlData> list = new ArrayList<xmlData>();
            list = j2x.parserXml();
            j2x.buildxml();
            if (list == null) {
                System.out.println("kong");
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        }
    }

}



dao

package com.xml.Dao;

public class xmlData {
    public String ID;
    public String  dataName;
    public String getID() {
        return ID;
    }
    public void setID(String iD) {
        ID = iD;
    }
    public String getDataName() {
        return dataName;
    }
    public void setDataName(String dataName) {
        this.dataName = dataName;
    }

}





0 0
原创粉丝点击