• java代码用dom4j解析xml文件的简单操作


    时间: 2016/02/17

    目标:为telenor的ALU Femto接口写一个采集xml文件并解析出locationName标签里的值,然后更新到数据库中。

    从网上搜了下,有四种常用的解析xml的方式,包括DOM,JAXD,Dom4J,SAX(simple api for xml).我正好有Dom4j的jar包,就选择了Dom4j来解析xml。

    前半截对xml的解析测试成功了。后面的数据库的连接,把数据更新到数据库的操作没有测试。对应的xml文件的行数有点多,没法上传,另写一个xml的文档上传。

      1 package com.example.xml.dom4h;
      2 
      3 import java.io.File;
      4 import java.sql.Connection;
      5 import java.sql.DriverManager;
      6 import java.sql.Statement;
      7 import java.util.Iterator;
      8 import java.util.List;
      9 
     10 import javax.xml.parsers.DocumentBuilder;
     11 import javax.xml.parsers.DocumentBuilderFactory;
     12 
     13 import org.dom4j.Document;
     14 import org.dom4j.Element;
     15 import org.dom4j.io.DOMReader;
     16 import org.dom4j.io.SAXReader;
     17 
     18 /**
     19 * dom4j框架学习: 读取并解析xml
     20 * 
     21 * 
     22 */
     23 public class Dom4j_parse {
     24 public static void main(String[] args) throws Exception {
     25 SAXReader saxReader = new SAXReader();
     26 
     27 Document document = saxReader.read(new File("snapshot-Automatic-2016-02-09-15-53-00-1.xml"));
     28 String bsrName = "";
     29 String bsrId = "";
     30 String region = "";
     31 String city = "";
     32 String address ="";
     33 String classification = "";
     34 // 获取根元素
     35 Element root = document.getRootElement();
     36 System.out.println("Root: " + root.getName());
     37 
     38 // 获取所有子元素
     39 List<Element> childList = root.elements();
     40 System.out.println("total child count: " + childList.size());
     41 
     42 // 获取特定名称的子元素
     43 Element femtoCluster = root.element("FemtoCluster");
     44 List<Element> childList2 = femtoCluster.elements("Femto");
     45 
     46 System.out.println("locationname child: " + childList2.size());
     47 //对每一个femto的locationName解析
     48 for(int i=0; i < childList2.size(); i++){
     49 Element femtoElement = childList2.get(i);
     50 String femtoId= femtoElement.attributeValue("id");
     51 Element attributeElement = femtoElement.element("attributes");
     52 
     53 //step1 对bsc的名称和id先处理
     54 
     55 Element bsrNameElement = attributeElement.element("bSRName");
     56 Element bsridElement = attributeElement.element("bsrId");
     57 bsrName = bsrNameElement.getTextTrim();
     58 bsrId = bsridElement.getTextTrim();
     59 System.out.println( " bstname :"+bsrNameElement.getTextTrim()+ " ,bsrid :"+bsridElement.getTextTrim());
     60 //step2 对locatin的处理
     61 //用下划线把值分割成三部分,第一部分是region,第二部分是address,第三部分是city
     62 Element locationElement =    attributeElement.element("locationName");
     63 String allString = locationElement.getTextTrim();
     64 //如果有值,安装上面的三部分解析,如果没值,给region,city为空。
     65 if(!allString.isEmpty() && allString !=null && allString !="" ){
     66 //allString有值的时候
     67 String[] allStringArray = allString.split("_");
     68 region = allStringArray[0];
     69 city = allStringArray[2];
     70 address = allStringArray[1];
     71 if(city.isEmpty() ){
     72 classification = "RR";
     73 }else{
     74 classification = "U_SB";
     75 }
     76 System.out.println( " region :"+ region + " , city :"+city +" , address:"+ address);
     77 }else{
     78 //allString没有值得时候
     79 region = "";
     80 city = "";
     81 address = "";
     82 classification = "RR";
     83 System.out.println( " region :"+ region + " , city :"+city +" , address:"+ address);
     84 }//end if
     85 //对这些数据插入到数据库中
     86 /*
     87 * update pm4h_db.mo_moentity t set (region,city,address,classification) = (region,city,address,classification)
     88 * where t.moentityid = bsrId
     89 * 
     90 * */
     91 }// end one element
     92 // 获取名字为指定名称的第一个子元素
     93 //    Element firstWorldElement = root.element("world");
     94 //    // 输出其属性
     95 //    System.out.println("first World Attr: "
     96 //    + firstWorldElement.attribute(0).getName() + "="
     97 //    + firstWorldElement.attributeValue("name"));
     98 //
     99 //    System.out.println("迭代输出-----------------------");
    100 //    // 迭代输出
    101 //    for (Iterator iter = root.elementIterator(); iter.hasNext();) {
    102 //    Element e = (Element) iter.next();
    103 //    System.out.println(e.attributeValue("name"));
    104 //
    105 //    }
    106 
    107 // System.out.println("用DOMReader-----------------------");
    108 //    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    109 //    DocumentBuilder db = dbf.newDocumentBuilder();
    110 //    // 注意要用完整类名
    111 //    org.w3c.dom.Document document2 = db.parse(new File("students.xml "));
    112 //
    113 //    DOMReader domReader = new DOMReader();
    114 //
    115 //    // 将JAXP的Document转换为dom4j的Document
    116 //    Document document3 = domReader.read(document2);
    117 //
    118 //    Element rootElement = document3.getRootElement();
    119 //
    120 //    System.out.println("Root: " + rootElement.getName());
    121 //连接数据库,并执行更新sql的方法
    122 
    123 
    124 }
    125 
    126 public void updateFemtoData(String region1,String city1,String address1,String classification1,String bsrid1) {
    127 try{
    128 //0 拼sql语句
    129 
    130 //modify
    131 String sql= " update pm4h_db.mo_moentity t set t.region =" + region1 
    132 +" ,city = "+ city1
    133 +" , classification= "+ classification1
    134 +" ,address = "+ address1
    135 + " where t.moentityid = " +bsrid1
    136 ;
    137 //1.加载驱动
    138 Class.forName("oracle.jdbc.driver.OracleDriver");
    139 //2 建立连接
    140 //modify ip and 
    141 Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@10.218.6.165:1521:mos5200","oracle","oracle");
    142 Statement st = ct.createStatement() ;
    143 int rs = st.executeUpdate(sql);
    144 }catch(Exception e){
    145 e.printStackTrace();
    146 }finally{
    147 
    148 if(true){
    149 //    st.close();
    150 //    ct.close();
    151 }
    152 }
  • 相关阅读:
    IntelliJ IDEA ESLint autofix/prettier
    常见电脑屏幕分辨率
    在Vue中使用echarts的两种方式
    升级npm和vue-cli
    挖坑指南:module namespace not found in mapGetters()
    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式
    如何在Vue项目中调试单个组件
    使用jquery的load方法只加载body之间的内容
    固化分组
    占有优先量词
  • 原文地址:https://www.cnblogs.com/gaochsh/p/5197006.html
Copyright © 2020-2023  润新知