2011-03-28 30 views

回答

0

我不认为这是可能加载“值1”直接进入String实例(按addObjectCreate),因为String是不可变的。与此相反,我会强制消化池调用一种方法。简短的样本:

import java.io.File; 
import org.apache.commons.digester.Digester; 

public class Tester { 
    public static void main(String[] args) throws Exception { 
     Tester t = new Tester(); 
     t.go(); 
    } 

    private String read; 

    void go() throws Exception { 
     Digester digester = new Digester(); 
     digester.push(this); 
     digester.addCallMethod("value", "readString", 1); 
     digester.addCallParam("value", 0); 
     digester.parse(new File("tester.xml")); 
     System.out.println("string: " + read); 
    } 

    public void readString(String a) { 
     this.read = a; 
    } 
} 

tester.xml

<?xml version="1.0" encoding="UTF-8"?> 
<value>value1</value> 
1

与卢卡斯的答案去,如果你不想再创建一个对象来保存的价值,那么你可以只按下一个StringBuilder然后使用addCallMethod致电append。为了清晰起见,我在此处复制了代码:

public class StringExtractor { 
    public static void main(String[] args) throws IOException, SAXException { 
     final String xml = "<value>value1</value>"; 

     final Digester digester = new Digester(); 
     digester.push(new StringBuilder()); 
     digester.addCallMethod("*/value", "append", 1); 
     digester.addCallParam("*/value", 0); 

     final String value = digester.parse(new StringReader(xml)).toString(); 
     System.out.println(value); 
    } 
}