休息食客

          隨心而動

            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 休息食客 閱讀(423) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 元阳县| 南部县| 合川市| 甘孜| 夏河县| 新建县| 广灵县| 马山县| 彩票| 永修县| 田林县| 正安县| 谢通门县| 中方县| 津市市| 喀喇| 新乐市| 皋兰县| 札达县| 册亨县| 蓬安县| 磐石市| 文化| 三穗县| 昌邑市| 淮阳县| 旌德县| 绥德县| 阳江市| 通州市| 昂仁县| 海伦市| 贡嘎县| 丰镇市| 永善县| 福海县| 辽宁省| 建阳市| 上栗县| 肇州县| 嘉定区|