使用公共消化器来解析subversion XML输出的问题

时间:2013-10-07 16:00:28

标签: java xml svn apache-commons-digester

Subversion XML格式的输出是属性和元素的组合 - 特别是在<path>元素中 - 请参阅下面的示例:

<?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>

我正在尝试使用commons digester将日志内容解析为两个不同的POJO(LogEntry和Path),使用以下内容:

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属性中。

但是我看不出为什么没有在Path中设置kind属性的原因。

有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

我需要使用digester.addSetProperties()调用来填充copyfrom-pathcopyfrom-rev个属性:

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

但由于某种原因,仍未填充kind属性。