2013-10-07 115 views
1

顛覆XML格式的輸出是屬性和元素的組合 - 特別是<path>元件內 - 參見下面的示例:問題來解析XML顛覆輸出

<?xml version="1.0" encoding="UTF-8"?> 
<log> 
<logentry 
    revision="29"> 
<author>bob</author> 
<date>2013-02-14T17:21:42.848605Z</date> 
<paths> 
<path 
    action="A" 
    kind="dir" 
    copyfrom-path="/trunk" 
    copyfrom-rev="28">/tags/TAG-0.1</path> 
</paths> 
<msg>Creating tag TAG-0.1</msg> 
</logentry> 
</log> 

我試圖使用公沼氣池解析使用下面這個日誌內容分成兩個不同的POJO的(LogEntry和路徑):

ArrayList<LogEntry> logEntries = new ArrayList<LogEntry>(); 
    digester.push(logEntries); 

    digester.addObjectCreate("*/logentry", LogEntry.class); 
    digester.addSetProperties("*/logentry"); 
    digester.addBeanPropertySetter("*/logentry/author"); 
    digester.addBeanPropertySetter("*/logentry/date"); 
    digester.addBeanPropertySetter("*/logentry/msg"); 
    digester.addSetNext("*/logentry", "add"); 

    digester.addObjectCreate("*/logentry/paths/path", Path.class);  
    digester.addSetProperties("*/logentry/paths/path"); 
    digester.addBeanPropertySetter("*/logentry/paths/path", "value"); 
    digester.addSetNext("*/logentry/paths/path", "addPath"); 

(注意讓addpath添加路徑對象被創建到創建LogEntry對象中的ArrayList<Path>

我想不通爲什麼Path類沒有被完全填充。基於XML,我可以理解爲什麼copyfrom-revcopyfrom-path屬性可能沒有被複制(由於連字符)到相應的copyFromRev屬性中。

但我看不到爲什麼kind屬性沒有在Path中設置的任何原因。

有沒有人有任何想法?

回答

0

我需要使用digester.addSetProperties()調用get填充copyfrom-pathcopyfrom-rev屬性:

digester.addSetProperties("*/logentry/paths/path", "copyfrom-path", "copyfrompath"); 
digester.addSetProperties("*/logentry/paths/path", "copyfrom-rev", "copyfromrev"); 

但是由於某種原因,那種屬性還沒有被填充。