java - 使用 Commons Digester 解析 Subversion XML 输出时出现的问题

标签 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摘要器将日志内容解析为两个不同的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 属性中。

但我看不出任何原因 kind属性未在路径中设置。

有人有什么想法吗?

最佳答案

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

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

但是由于某种原因,kind 属性仍然没有被填充。

关于java - 使用 Commons Digester 解析 Subversion XML 输出时出现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19229402/

相关文章:

java - 如何通过单击操作/按钮来停止线程 hibernate ?

java - 查找数组中第二小的整数

c# - C# .Net 中 XmlElement 中的空白

xml_grep 从元素中获取属性

svn - 在 SVN 中向上移动目录的白痴指南

android - 从 Eclipse + SVN 迁移到 Android Studio

java - Apache Derby : Achieving 'SELECT INTO' behaviour

java - 有没有办法阻止列表上的集合操作?

C# 字典层次结构到 xml 字符串?

Windows 网络共享上的 svn 存储库