Шаблон сборника Apache: нужно что-то вроде XSLT ‘.’ или ‘current()’

#xml #design-patterns #apache-commons-digester

#xml #шаблоны проектирования #apache-commons-digester

Вопрос:

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

Вот так: (упрощенный)

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

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

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

(В XSLT обычно используется ‘.’ или ‘current ()’, например, в аналогичном сценарии)

Ответ №1:

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

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

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