Apache Digester模式:需要类似XSLT的''。或'当前()'

时间:2011-10-16 13:49:48

标签: xml design-patterns 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()'setter?

(在XSLT中,例如,在类似场景中通常使用'。'或'current()')

1 个答案:

答案 0 :(得分:0)

得到它:显然空模式字符串将匹配当前节点的文本:

这对我有用:

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