我使用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循环中执行此操作?
感谢。
答案 0 :(得分:1)
在if语句中而不是
$dog.name.getText()
使用
$dog.name.text
#foreach( $dog in $animals.dogs.children() )
#if ($dog.name.text != 'whatever')
## do something
#end
#end
Velocity允许您通过简写符号访问属性。要查找属性的对象必须是 通过Velocity变量提供,符号由前导变量后跟点(“。”)组成 字符和另一个VTL标识符。
$customer.address
$purchase.total
$cart.customerDiscount
属性名称可以表示以下元素,具体取决于用于查找的对象:
如果对象有一个方法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使用相同的简写