2011-03-28 29 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); 
    } 
}