<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    休息食客

    隨心而動

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      16 隨筆 :: 7 文章 :: 2 評論 :: 0 Trackbacks
    java解析xml文件的方式有幾種,下面介紹用dom4j方式解析

    1、先看一段xml內容
      1 <configs>
      2 
      3     <config key="01002" name="支付申請表" order="1">  <!--key為config鍵。 order為級別 ,1為最高級別,級別越高,放在最前面,相同級別無須-->
      4         <!-- 取數模式 D:按日生成  M:按月生成  Y:按年生成 -->
      5         <mode>D</mode>
      6         <!-- 依賴數據,需校驗parent是否已生成成功 -->
      7         <parents></parents>
      8         <!-- 初始抽取時間 -->
      9         <defaultTime>2013-05-01</defaultTime>
     10         <!-- 數據源SQL -->
     11         <sqls>
     12             <sql>
     13             <![CDATA[
     14             select * from XXX
     15             ]]>
     16             </sql>
     17             <sql>
     18             <![CDATA[
     19             select * from XXX
     20             ]]>
     21             </sql>
     22         </sqls>
     23         <!-- 上傳數據源字段類型及長度 -->
     24         <colTypes>
     25             <colType>
     26                 <type>number</type>
     27                 <length>18</length>
     28             </colType>
     29             <colType>
     30                 <type>string</type>
     31                 <length>10</length><!-- char或者varchar統一定義為string -->
     32             </colType>
     33         </colTypes>
     34         <!-- 上傳、下載文件生成配置 ,最多4個文件,數據文件、校驗文件、文件級校驗報告、記錄級校驗報告 -->
     35         <files>
     36             <file type="data">
     37                 <name>a_10100_EBS_{YYYYMMDD-D}_01002_{NO}_{SERIAL}</name> <!-- 文件名, {}擴起部分為通配,YYYYMMDD-D代表數據日期,YYYYMMDD-S代表系統日期 -->
     38                 <suffix>.dat</suffix>    <!-- 生成的文件后綴名 -->
     39                 <code>GBK</code>    <!-- 生成的文件編碼格式 -->
     40                 <compress>GZ</compress>    <!-- 生成文件需壓縮的文件類型,自定義通配 -->
     41                 <size>2000000000</size>    <!-- 文件大小,超出則分割, byte -->
     42                 <tempPath>temp</tempPath><!-- 臨時存放路徑 -->
     43                 <path>data</path> <!-- 上傳、下載的路徑 -->
     44             </file>
     45             <file type="check">
     46                 <name>a_10100_EBS_{YYYYMMDD-D}_01002_{NO}</name>
     47                 <suffix>.verf</suffix>
     48                 <code>GBK</code>
     49                 <compress>GZ</compress>
     50                 <size>1024</size>
     51                 <tempPath>temp</tempPath><!-- 臨時存放路徑 -->
     52                 <path>data</path>
     53             </file>    
     54         </files>
     55     </config>
     56     
     57     <config key="01004" name="調撥申請表" order="1">
     58         <!-- 取數模式 D:按日生成  M:按月生成  Y:按年生成 -->
     59         <mode>D</mode>
     60         <!-- 依賴數據,需校驗parent是否已生成成功 -->
     61         <parents></parents>
     62         <!-- 初始抽取時間 -->
     63         <defaultTime>2013-05-01</defaultTime>
     64         <!-- 數據源SQL -->
     65         <sqls>
     66             <sql>
     67             <![CDATA[
     68                select * from XXX
     69             ]]>
     70             </sql>
     71             <sql>
     72             <![CDATA[
     73                select * from XXX
     74             ]]>
     75             </sql>
     76         </sqls>
     77         <!-- 上傳數據源字段類型及長度 -->
     78         <colTypes>
     79             <colType>
     80                 <type>number</type>
     81                 <length>18</length>
     82             </colType>
     83             <colType>
     84                 <type>string</type>
     85                 <length>10</length>
     86             </colType>
     87         </colTypes>
     88         <!-- 上傳文件生成配置 ,最多2個文件,數據文件和校驗文件,不需要校驗文件,可屏蔽 -->
     89         <files>
     90             <file type="data">
     91                 <name>a_10100_EBS_{YYYYMMDD-D}_01004_{NO}_{SERIAL}</name> <!-- 文件名, {}擴起部分為通配 ,YYYYMMDD-D代表數據日期,YYYYMMDD-S代表系統日期 -->
     92                 <suffix>.dat</suffix>    <!-- 生成的文件后綴名 -->
     93                 <code>GBK</code>    <!-- 生成的文件編碼格式 -->
     94                 <compress>GZ</compress>    <!-- 生成文件需壓縮的文件類型,自定義通配 -->
     95                 <size>2000000000</size>    <!-- 文件大小,超出則分割, byte -->
     96                 <tempPath>temp</tempPath><!-- 臨時存放路徑 -->
     97                 <path>data</path>
     98             </file>
     99             <file type="check">
    100                 <name>a_10100_EBS_{YYYYMMDD-D}_01004_{NO}</name>
    101                 <suffix>.verf</suffix>
    102                 <code>GBK</code>
    103                 <compress>GZ</compress>
    104                 <size>1024</size>
    105                 <tempPath>temp</tempPath><!-- 臨時存放路徑 -->
    106                 <path>data</path>
    107             </file>        
    108         </files>
    109     </config>
    110     
    111 </configs>
    別管xml要提供的功能,只看結構,根節點是configs,一級節點是兩個config,然后config里面有多個子節點mode、parents、defaultTime、sqls、colTypes、file,然后sqls等等還有子節點,那么要怎么一級一級獲取呢?

    2、看java代碼:
      1 try {
      2             String path = InterfaceConfig.class.getResource("").getPath().toString();//獲取類所在路徑
      3             if (path.contains(".jar")) {
      4                 path = path.replace("/", File.separator);//將/換成\
      5                 path = path.replace("file:""");//去掉file
      6                 path = path.replace("classes\\""");//去掉classes\
      7                 if (path.startsWith("\\")) {
      8                     path = path.substring(1);//去掉第一個\,如:、\D:\TongWeb  ,在linux上沒有這種情況
      9                 }
     10                 path = path.split("WEB-INF")[0]+"WEB-INF"+File.separator+"classes";
     11             } else {
     12                 path = InterfaceConfig.class.getResource("/").getPath().toString();//獲取根路徑
     13             }
     14             //String realPath = ActionUtils.getRequest().getRealPath("/")+File.separator+"WEB-INF"+File.separator+"classes";
     15             File file = new File(path + File.separator + "InterfaceConfig.xml");
     16             SAXReader reader = new SAXReader(); 
     17             Document doc = reader.read(file);
     18             Element root = doc.getRootElement(); 
     19             Iterator<Element> configs = root.elementIterator("config");
     20             InterfaceConfig ifc = null;
     21             while (configs.hasNext()) {
     22                 ifc = new InterfaceConfig();
     23                 Element config = configs.next();
     24                 
     25                 String key = config.attributeValue("key");
     26                 String name = config.attributeValue("name");
     27                 String order = config.attributeValue("order");
     28                 ifc.setKey(key);
     29                 ifc.setName(name);
     30                 ifc.setOrder(order);
     31                 
     32                 // 獲取config下的mode
     33                 String modeValue = config.element("mode").getText();
     34                 ifc.setMode(modeValue);
     35                 
     36                 // 獲取初始抽取時間
     37                 String defaultTime = config.element("defaultTime").getText();
     38                 ifc.setDefaultTime(defaultTime);
     39                 
     40                 // 獲取config下的parents
     41                 List<Element> parents = config.element("parents").elements();
     42                 List<String> parentsList = new ArrayList<String>();
     43                 for (Element e : parents) {
     44                     parentsList.add(e.getText());
     45                 }
     46                 ifc.setParents(parentsList);
     47                 
     48                 //獲取config下的sqls
     49                 List<Element> sqls = config.element("sqls").elements(); 
     50                 List<String> sqlsList = new ArrayList<String>();
     51                 for (Element e : sqls) {
     52                     String sqlValue = e.getText().replaceAll("\n"" ").replaceAll("\t"" ");
     53                     sqlsList.add(sqlValue);
     54                 }
     55                 ifc.setSqls(sqlsList);
     56                 
     57                 //獲取config下的colTypes
     58                 List<Element> colTypes = config.element("colTypes").elements(); 
     59                 List<ColType> ctList = new ArrayList<ColType>();
     60                 ColType ct = null;
     61                 for (Element e : colTypes) {
     62                     ct = new ColType();
     63                     ct.setType(e.element("type").getText());
     64                     ct.setLength(e.element("length").getText());
     65                     ctList.add(ct);
     66                 }
     67                 ifc.setColTypes(ctList);
     68                 
     69                 //獲取config下的files
     70                 List<Element> files = config.element("files").elements(); 
     71                 Map<String,ConfigFile> filesMap = new HashMap<String,ConfigFile>();
     72                 ConfigFile cf = null;
     73                 for (Element e : files) {
     74                     cf = new ConfigFile();
     75                     String type = e.attributeValue("type");
     76                     cf.setType(type);
     77                     cf.setName(e.element("name").getText());
     78                     cf.setSuffix(e.element("suffix").getText());
     79                     cf.setCompress(e.element("compress").getText());
     80                     cf.setCode(e.element("code").getText());
     81                     cf.setSize(Long.parseLong(e.element("size").getText()));
     82                     cf.setTempPath(e.element("tempPath").getText());
     83                     cf.setPath(e.element("path").getText());
     84                     filesMap.put(type, cf);
     85                 }
     86                 ifc.setFiles(filesMap);
     87                 lic.add(ifc);
     88                 
     89             }
     90             Map<String,InterfaceConfig> msi = null;
     91             for(InterfaceConfig ifcs : lic){
     92                 if(!msmsi.containsKey(ifcs.getOrder())){
     93                     msi = new HashMap<String,InterfaceConfig>();
     94                     msi.put(ifcs.getKey(), ifcs);
     95                     msmsi.put(ifcs.getOrder(),msi);
     96                 } else {
     97                     msmsi.get(ifcs.getOrder()).put(ifcs.getKey(), ifcs);
     98                 }
     99             }
    100             
    101         } catch (Exception e) {
    102             throw new RuntimeException(e);
    103         }

    先獲取configs里面的所有config,然后對它進行迭代,獲取每一個config。
    接下來是獲取config里面的節點了,如果config里的子節點沒有“后代”了,如mode節點,那么直接String modeValue = config.element("mode").getText();就獲取值了,
    但是如果config里的有些子節點還有子節點,如files節點,就List<Element> files = config.element("files").elements();放到一個集合里,然后循環取出。



    posted on 2015-02-11 17:23 休息食客 閱讀(420) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 特级做A爰片毛片免费看无码| 亚洲国产成人超福利久久精品| 高清一区二区三区免费视频| 亚洲中文字幕久久精品无码VA| 亚洲中文字幕久久精品无码APP| 97热久久免费频精品99| 国产亚洲一卡2卡3卡4卡新区 | yellow视频免费看| 亚洲午夜精品在线| 亚洲中文字幕在线观看| 亚洲高清国产拍精品青青草原 | 亚洲国产综合人成综合网站00| 国产亚洲人成A在线V网站| 哒哒哒免费视频观看在线www| 免费人成在线观看69式小视频| 91大神在线免费观看| 日本一区二区免费看| 国产精品99久久免费观看| 成人电影在线免费观看| 一个人免费视频观看在线www| 国产精品亚洲а∨无码播放麻豆| 亚洲1234区乱码| 亚洲精品色播一区二区| 亚洲暴爽av人人爽日日碰| 日韩亚洲人成在线综合| 免费夜色污私人影院网站| 亚洲精品黄色视频在线观看免费资源| 午夜在线亚洲男人午在线| 国产男女爽爽爽免费视频| a级毛片免费在线观看| 午夜无码A级毛片免费视频| 在线看免费观看AV深夜影院| 色影音免费色资源| 国产一级特黄高清免费大片| 亚洲黄片毛片在线观看| 国产亚洲一区二区在线观看| 亚洲Av无码精品色午夜| 亚洲国产日韩精品| 插鸡网站在线播放免费观看| 国产a视频精品免费观看| 免费观看国产小粉嫩喷水|