使用Digester解析XML文件简单范例

 需要读取的XML文件PayoutConfig.xml:

< pageList >
  
< payout_entry  name ="债项支用-授信品种和URL对照表" >
      
< item  productCode ="02001001"     productName ="土地储备贷款"   />    
      
< item  productCode ="04001002"     productName ="房地产开发"    />   
      
< item  productCode ="03005001"     productName ="基本建设贷款"   />  
      
< item  productCode ="01004002"     productName ="技术改造贷款"   />
 
</ payout_entry >
</ pageList >

配置文件中item对应的类XmlVO.java

package  com.xml;

public   class  XmlVO  {
        
private String productCode; //授信品种
        private String productName; // 授信品种名称
        public String getProductCode() {
            
return productCode;
        }

        
public void setProductCode(String productCode) {
            
this.productCode = productCode;
        }

        
public String getProductName() {
            
return productName;
        }

        
public void setProductName(String productName) {
            
this.productName = productName;
        }

        
    }

建立XML文件解析类XmlConfig.java:

package  com.xml;

import  java.io.IOException;
import  java.io.InputStream;
import  java.util.ArrayList;
import  java.util.List;
import  org.apache.commons.digester.Digester;
import  org.xml.sax.SAXException;
import  com.xml.XmlVO;

public   class  XmlConfig  {
    
        
private static final String _PayoutPageConfig = "/com/xml/PayoutConfig.xml";
                
        
private static Digester digester;

        
private static XmlConfig instance = null;

        
private static final List PayoutElementVOList = new ArrayList();

        
public static XmlConfig getInstance() throws Exception {
            
if (instance == null{
                instance 
= new XmlConfig();
                System.out.println(_PayoutPageConfig);
                init();
            }

            
return instance;
        }


        
private static void init() throws IOException, SAXException, Exception {
            InputStream is 
= XmlConfig.class.getResourceAsStream(_PayoutPageConfig);
            digester 
= new Digester();
            digester.push(XmlConfig.getInstance());
            digester.setValidating(
false);
            digester.setNamespaceAware(
false);
            addPayoutElement(digester, 
"pageList/payout_entry/item","addPayoutElementList");
            digester.parse(is);
        }


        
private static void addPayoutElement(Digester digester, String model,
                String method) 
{
            digester.addObjectCreate(model, XmlVO.
class);
            digester.addSetProperties(model);
            digester.addSetNext(model, method);
        }


        
public void addPayoutElementList(XmlVO payoutElement) {
            PayoutElementVOList.add(payoutElement);
        }


        
public List getPayoutElementList() {
            
return PayoutElementVOList;
        }


        
public static List getPayoutElementVOList() {
            
return PayoutElementVOList;
        }


}

现在就可以建立一个测试类来读取配置文件XmlTest.java:

package  com.xml;

import  java.util.List;
import  org.xml.sax.SAXException;
import  com.xml.XmlConfig;
import  com.xml.XmlVO;

public   class  XmlTest  {

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
try {
            List payList 
= XmlConfig.getInstance().getPayoutElementVOList();
            
for (int i = 0; i < payList.size(); i++{
                XmlVO payVO 
= (XmlVO) payList.get(i);
                System.out.println(payVO.getProductCode()
+payVO.getProductName());

            }


        }
 catch (SAXException e) {
            System.out.print(e.getMessage());
        }
 catch (Exception e) {
            System.out.print(e.getMessage());
        }


    }


}

注意点:

1、必须把commons-beanutils-1.6.1.jar,commons-digester-1.5.jar,commons-collections-3.1.jar添加到编译路径中,否则会报错

2、XmlConfig.class.getResourceAsStream(_PayoutPageConfig)中XML文件的位置是以classes为根路径的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值