• java-读取xml


    1.使用w3c.document

    /**
         * 测试
         * 
         */
        public static void testReadLabel() {
            String path = "C:\Users\huage\Desktop\o\示例数据V2.0";
            File file = new File(path);
            List<String> list = readChildFiles(file);
    
            Set<String> setTableName = new HashSet<String>();
    
            for (String p : list) {
                int suffixindex = p.lastIndexOf(".");
                if (suffixindex < 0)
                    suffixindex = 0;
                String suffix = p.substring(suffixindex);
                if (".xml".equalsIgnoreCase(suffix)) {
                    // System.out.println(p);
    
                    DocumentBuilderFactory dbf = DocumentBuilderFactory
                            .newInstance();
                    try {
                        DocumentBuilder db = dbf.newDocumentBuilder();
                        Document doc = db.parse("file:///" + p);
                        NodeList dogList = doc.getChildNodes();
                        for (int i = 0; i < dogList.getLength(); i++) {
                            Node dog = dogList.item(i);
                            for (Node node = dog.getFirstChild(); node != null; node = node
                                    .getNextSibling()) {
                                if (node.getNodeType() == Node.ELEMENT_NODE) {
                                    String name = node.getNodeName();
                                    setTableName.add(name);
                                    System.out.println("xmlTableMap.put("" + name+ "", new TableXml(""));");
                                    if (name.contains("像元光谱")) {
                                        System.out.println(p);
                                    }
                                }
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
    
            // 所有节点的表名
            /*
             * for (String name : setTableName) {
             * System.out.println("xmlTableMap.put(""
             * +name+"", new TableXml(""+name+"",""));"); }
             */
        }

    2.使用dom4j

    主类如下----

    public class dom4jTestXML {
     /**
      * 
      * 方法描述:读取XML文件示例 备 注: </br> 
      * 创 建 人: bo.gaobo</br> 
      * 修改日期: @2013-8-20</br>
      */
     public static void readXML() {
      SAXReader sr = new SAXReader();// 获取读取xml的对象。
      try {
       Document doc = sr.read("src/Noname1.xml");// 得到xml所在位置。然后开始读取。并将数据放入doc中
       Element el_root = doc.getRootElement();// 向外取数据,获取xml的根节点。
       System.out.println("根节点:" + el_root.getName());
       Iterator it = el_root.elementIterator();// 从根节点下依次遍历,获取根节点下所有子节点
       while (it.hasNext()) {// 遍历子节点
        Object o = it.next();
        Element el_row = (Element) o;
        String str = el_row.getText();
        Iterator it_row = el_row.elementIterator();
        while (it_row.hasNext()) {
         Element el_ename = (Element) it_row.next();
         System.out.println(el_ename.getName() + "="
           + el_ename.getData());
        }
       }
      } catch (DocumentException e) {
       e.printStackTrace();
      }
     }

    /**
      * 
      * 方法描述:写入XML文件并存储 备 注: </br> 
      */

    public static void writeToXML() {
      Row row1 = new Row();
      row1.setCo("co_1");
      row1.setComm("comm_1");
      row1.setDepno("depno_1");
      row1.setEmpno("empno_1");
      row1.setEname("ename_1");
      row1.setMgr("mgr_1");
      row1.setHiredate("2012-03-29");
      row1.setJob("job_1");
      row1.setSal("sal_1");
    
      Document document = DocumentHelper.createDocument();
      Element root = document.addElement("ROWDATA");
      Element row = root.addElement("ROW");
      row.addElement("CO").addText(row1.getCo());
      row.addElement("EMPNO").addText(row1.getEmpno());
      row.addElement("ENAME").addText(row1.getEname());
      row.addElement("JOB").addText(row1.getJob());
      row.addElement("MGR").addText(row1.getMgr());
      row.addElement("HIREDATE").addText(row1.getHiredate());
      row.addElement("SAL").addText(row1.getSal());
      row.addElement("COMM").addText(row1.getComm());
      row.addElement("DEPTNO").addText(row1.getDepno());
    
      String filePath = "D:/xmlTest/" + getNowDay() + "/";
      String fileName = "row1.xml";
      
      String xmlStr = "";
      xmlStr = document.asXML();
      try {
       Document dcmt = DocumentHelper.parseText(xmlStr);
       saveDocumentToFile(dcmt, filePath, fileName, true, "UTF-8");
      } catch (DocumentException e) {
       e.printStackTrace();
      }
      
      
    
     }
    
     public static String getNowDay() {
      SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
      return format.format(new Date());
     }

     /**
      * 方法描述:<b>存储完整XML文件.</b></br> 
      * 
      * @param document
      * @param xmlFilePath
      * @param xmlFileName
      * @param isTrimText
      * @param xmlEncoding
      */
     public static void saveDocumentToFile(Document document,
       String xmlFilePath, String xmlFileName, boolean isTrimText,
       String xmlEncoding) {
      if (document == null || xmlFilePath == null || "".equals(xmlFileName)) {
       return;
      }
    
      File file = new File(xmlFilePath);
      // 判断路径是否存在,不存在创建
      if (!file.exists()) {
       file.mkdirs();
      }
      // 保存文件
      OutputFormat format = null;
    
      if (isTrimText) {
       format = OutputFormat.createPrettyPrint();
      } else {
       format = DomXmlOutputFormat.createPrettyPrint();// 保留xml属性值中的回车换行
      }
    
      if (xmlEncoding != null) {
       format.setEncoding(xmlEncoding);// GBK
      } else {
       format.setEncoding("UTF-8");// UTF-8
      }
    
      try {
       org.dom4j.io.XMLWriter xmlWriter = new org.dom4j.io.XMLWriter(
         new FileOutputStream(xmlFilePath + xmlFileName), format);// FileOutputStream可以使UTF-8生效
       xmlWriter.write(document);
       xmlWriter.close();
      } catch (IOException e) {
       System.out.println("保存XML异常:" + e.getMessage());
       System.out.println("正在保存的文件名是:" + xmlFileName);
      }
      // 存到文件中结束
     }
    
     public static void main(String args[]) {
    //  readXML();
      writeToXML();
     }
    
    }
    
    class Row {
    
     private String co;
     private String empno;
     private String ename;
     private String job;
     private String mgr;
     private String hiredate;
     private String sal;
     private String comm;
     private String depno;
    
     public String getCo() {
      return co;
     }
    
     public void setCo(String co) {
      this.co = co;
     }
    
     public String getEmpno() {
      return empno;
     }
    
     public void setEmpno(String empno) {
      this.empno = empno;
     }
    
     public String getEname() {
      return ename;
     }
    
     public void setEname(String ename) {
      this.ename = ename;
     }
    
     public String getJob() {
      return job;
     }
    
     public void setJob(String job) {
      this.job = job;
     }
    
     public String getHiredate() {
      return hiredate;
     }
    
     public void setHiredate(String hiredate) {
      this.hiredate = hiredate;
     }
    
     public String getSal() {
      return sal;
     }
    
     public void setSal(String sal) {
      this.sal = sal;
     }
    
     public String getComm() {
      return comm;
     }
    
     public void setComm(String comm) {
      this.comm = comm;
     }
    
     public String getDepno() {
      return depno;
     }
    
     public void setDepno(String depno) {
      this.depno = depno;
     }
    
     public String getMgr() {
      return mgr;
     }
    
     public void setMgr(String mgr) {
      this.mgr = mgr;
     }
    }

    主类结束----

    辅助类,重写了createPrettyPrint()方法----

    import org.dom4j.io.OutputFormat;
    /**
     * 类 描 述:<b>dom4j输出格式化.</b></br>
     */
    public class DomXmlOutputFormat extends OutputFormat {  
     /**
      * 方法描述:<b>dom4j输出格式化..</b></br>
      * 备          注: 保存Document到xml文件时,xml属性中的回车换行需要保留,
      *    可是发现在使用过程中发现dom4j自动把回车换行去掉了。特写此类</br>
      * @return
      */
        public static OutputFormat createPrettyPrint() {   
            OutputFormat format = new OutputFormat();   
            format.setIndentSize(2);   
            format.setNewlines(true);   
            format.setTrimText(false); // 覆盖 父类的  format.setTrimText(true);  
            format.setPadText(true);  
    
            return format;   
        }  
    
    } 

    辅助类结束----

    示例XML文件----

    <?xml version="1.0" ?>
    <ROWDATA>
    <ROW>
      <C0>1</C0>
      <EMPNO>7891</EMPNO>
      <ENAME>sdffff</ENAME>
      <JOB>job</JOB>
      <MGR>mgr</MGR>
      <HIREDATE>2010-1-1</HIREDATE>
      <SAL>5000.00</SAL>
      <COMM>1000.00</COMM>
      <DEPTNO>deptno</DEPTNO>
    </ROW>
    <ROW>
      <C0>2</C0>
      <EMPNO>7369</EMPNO>
      <ENAME>SMITH</ENAME>
      <JOB>CLERK</JOB>
      <MGR>7902</MGR>
      <HIREDATE>1980-12-17</HIREDATE>
      <SAL>800.00</SAL>
      <COMM>comm</COMM>
      <DEPTNO>20</DEPTNO>
    </ROW>
    </ROWDATA>

    示例文件结束----

  • 相关阅读:
    写在“开张”时
    上班真累
    版本控制
    电脑主板报警声音的故障现象对照表
    js页面打开倒计时
    js中的词法分析
    修改mysql数据库密码
    上班的感受
    能力是被逼出来的!!有压力才有动力
    js中绑定事件的三种方式
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/5786263.html
Copyright © 2020-2023  润新知