以apache的速度过滤数据以进行循环

时间:2017-06-26 21:08:15

标签: apache xml-parsing velocity

我使用Apache速度来解析xml文件,让我说我有以下情况:

我的XML包含一个<animals>根节点,其中包含一个<dogs>节点,其中包含3个奇异<dog>个子节点,每个节点都有一个包含值的<name>节点。

<animals>
    <dogs>
        <dog>
            <name>REX</name>
        </dog> 
        <dog>
            <name>FELIX</name>
        </dog> 
        <dog>
            <name>REX</name>
        </dog> 
    </dogs>
</animals>

在我的力度模板中,我有一个foreach循环获取所有<dog>个节点,如下所示:

#foreach( $dog in $animals.dogs.children() )
    $dog.name.getText() 
#end

所以,这个基本的例子是有效的,但是如果我必须过滤掉那些已经将FELIX作为名字的狗?仅循环使用名称为REX的狗,我尝试使用IF语句,但是它不能使用getText(),有没有办法直接在foreach循环中执行此操作?

感谢。

1 个答案:

答案 0 :(得分:1)

在if语句中而不是

$dog.name.getText()

使用

$dog.name.text

实施例

#foreach( $dog in $animals.dogs.children() )
    #if ($dog.name.text != 'whatever')
       ## do something
    #end
#end

4.3属性

  

Velocity允许您通过简写符号访问属性。要查找属性的对象必须是   通过Velocity变量提供,符号由前导变量后跟点(“。”)组成   字符和另一个VTL标识符。

$customer.address
$purchase.total
$cart.customerDiscount

示例4.2有效的属性名称

  

属性名称可以表示以下元素,具体取决于用于查找的对象:

  • 如果对象有一个方法get,其中未修改属性名称,则调用此方法

  • 如果对象是Java bean(具有符合Sun Java Bean规范的方法以访问bean属性),则执行bean getter以访问值

  • 最后,如果用于查找属性的对象具有get(String)方法,则调用此方法。

拿第一个例子,$ customer.address。它可以有多种含义:1

  • 当对象有方法getaddress()时,调用此方法

  • 当对象是具有属性地址的Java bean时,调用其getter,getAddress()

  • 当对象有方法get(String)时,调用此方法,将地址作为参数传递。

  • 当对象有方法isAddress()时,调用此方法。

  

注意当属性名称引用getter方法时,$ obj.property和$ obj.Property都将   调用相同的方法(getproperty()或getProperty())。但是,如果是对象   由$ obj表示的有一个get(String)方法,$ obj.property和$ obj.Property会   将不同的值传递给此get(String)方法。这可能导致难以发现的问题。它是   在您的应用程序中标准化属性名称大写的良好做法。   如果您想知道如何设置属性值,请查看#set()指令章节。属性的设置   在那里讨论

https://people.apache.org/~henning/velocity/pdf/VelocityUsersGuide.pdf

仅供参考,JSTL / EL使用相同的简写