Apache Digester Pattern: нужно что-то вроде XSLT '.'или 'current ()' - PullRequest
0 голосов
/ 16 октября 2011

Я пытаюсь использовать Apache Digester (V3) для обработки XML-файла, который содержит 'thread-dumps': поэтому файл содержит много потоков-дампов, один поток-дамп содержит много потоков, а один поток содержит трассировку стека, который состоит из множества строк

Как это: (упрощенно)

<threaddumps>
<threaddump name="xxx">
<thread name="thread-1">
<stacktrace>
<line>
java.lang.wait
</line>
<line>
...
</line>
</stacktrace>
</thread>
<thread name="thread-2">
...
</threaddump>
<threaddump name="yyy">
...
</threaddumps>

Я использую правило на основе XML для обработки этого входного файла; фрагмент ниже:

<pattern value="thread">
                <object-create-rule classname="mypackagemodel.Thread"/>
                <set-next-rule methodname="addThread" paramtype="mypackagemodel.Thread"/>
                <set-properties-rule>
                    <alias attr-name="name" prop-name="name" />
                </set-properties-rule>
                <pattern value="stacktrace/line">
                        <object-create-rule classname="mypackagemodel.StackLine"/>
                        <set-next-rule methodname="addStackLine" paramtype="mypackagemodel.StackLine"/>
                        <!-- need something here -->
                </pattern>  
</pattern>

Как мне вытащить этот текст из промежуточных тэгов? Я уже подхожу для 'stacktrace / line', нет подэлемента для использования - так какой шаблон я могу использовать?

Другой способ выразить это - объект 'StackLine' создается и правильно связывается - просто я не знаю, как вызвать мой метод setName () с?

(Например, в XSLT обычно используется «.» Или «current ()» в аналогичном сценарии)

1 Ответ

0 голосов
/ 16 октября 2011

Понял: очевидно, пустая строка шаблона будет соответствовать тексту текущего узла:

Это сработало для меня:

<bean-property-setter-rule pattern="" propertyname="line"/>
...