<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
    主站蜘蛛池模板: 国产免费131美女视频| 希望影院高清免费观看视频| 色www永久免费视频| 亚洲中文无码mv| 国产精品免费看香蕉| 青娱乐在线视频免费观看| 国产精品免费播放| 瑟瑟网站免费网站入口| 亚洲日韩国产精品乱| 最近免费mv在线观看动漫| 亚洲日本韩国在线| 中文精品人人永久免费| 久久久久亚洲AV片无码| 国产一级a毛一级a看免费视频 | 色老头永久免费网站| 国产AV旡码专区亚洲AV苍井空 | 久久毛片免费看一区二区三区| 中文字幕免费在线视频| 亚洲av无码不卡| 无码乱肉视频免费大全合集| 亚洲天堂2016| 亚洲国产一成久久精品国产成人综合| 国产va免费精品| 亚洲视频在线观看网址| 好吊妞788免费视频播放| 国产日韩精品无码区免费专区国产 | 99re在线精品视频免费| 波多野结衣亚洲一级| 亚洲成a人片在线观看久| 久久青草精品38国产免费| 亚洲午夜理论片在线观看| 中文字幕亚洲综合久久菠萝蜜 | 四只虎免费永久观看| 免费的全黄一级录像带| 伊人久久亚洲综合影院首页| 亚洲成A∨人片天堂网无码| 99re6在线视频精品免费下载| 亚洲色大成网站www尤物| 亚洲综合熟女久久久30p| 久久不见久久见中文字幕免费| 午夜在线免费视频 |