Проблемы с использованием обычного анализатора для анализа выходных данных XML Subversion
Форматированный вывод 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>
Я пытаюсь использовать общий анализатор для анализа содержимого журнала в двух разных 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 добавляет созданный объект пути к ArrayList<Path>
внутри созданного объекта LogEntry)
Я не могу понять, почему класс Path не заполняется полностью. Основываясь на XML, я могу понять, почему copyfrom-rev
а также copyfrom-path
атрибуты могут не копироваться (из-за дефиса) в соответствующие атрибуты copyFromRev.
Но я не вижу никакой причины, почему kind
атрибут не устанавливается в пути.
У кого-нибудь есть какие-либо идеи?
1 ответ
Мне нужно использовать digester.addSetProperties()
позвонить, чтобы получить copyfrom-path
а также copyfrom-rev
атрибуты заполнены:
digester.addSetProperties("*/logentry/paths/path", "copyfrom-path", "copyfrompath");
digester.addSetProperties("*/logentry/paths/path", "copyfrom-rev", "copyfromrev");
Однако по какой-то причине атрибут kind все еще не заполняется.