Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在apache velocity for循环中过滤数据_Apache_Xml Parsing_Velocity - Fatal编程技术网

在apache velocity for循环中过滤数据

在apache velocity for循环中过滤数据,apache,xml-parsing,velocity,Apache,Xml Parsing,Velocity,我使用Apache velocity解析xml文件,假设我有以下情况: 我的XML包含一个根节点,其中包含一个节点,该节点具有3个单数子节点,每个子节点都有一个包含值的节点 <animals> <dogs> <dog> <name>REX</name> </dog> <dog> <name>FEL

我使用Apache velocity解析xml文件,假设我有以下情况:

我的XML包含一个根节点,其中包含一个节点,该节点具有3个单数子节点,每个子节点都有一个包含值的节点

<animals>
    <dogs>
        <dog>
            <name>REX</name>
        </dog> 
        <dog>
            <name>FELIX</name>
        </dog> 
        <dog>
            <name>REX</name>
        </dog> 
    </dogs>
</animals>
所以,这个基本的例子是有效的,但是如果我不得不从foreach中过滤掉一只没有FELIX名字的狗呢?仅在名为REX的狗上循环例如,我尝试使用IF语句,但它不适用于getText,有没有直接在foreach循环中这样做的方法


谢谢。

在if语句中,而不是

$dog.name.getText()
使用

实例 4.3财产 Velocity允许您通过简写符号访问属性。要查找属性的对象必须是 可通过速度变量获得,符号由前导变量和点组成。 字符和另一个VTL标识符

示例4.2有效的属性名称 根据用于查找的对象,特性名称可以表示以下元素:

如果对象具有未修改属性名的方法get,则会调用此方法

否则,如果对象是一个javabean,并且具有符合sunjavabean规范的方法来访问bean属性,那么将执行bean getter来访问该值

最后,如果用于查找属性的对象具有getString方法,请调用此方法

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

当对象具有getaddress方法时,调用此方法

当对象是具有属性地址的JavaBean时,调用其getter getAddress

当对象具有方法getString时,调用此方法,并将地址作为参数传递

当对象具有方法isAddress时,调用此方法

注意:当属性名称引用getter方法时,$obj.property和$obj.property将同时引用 调用相同的方法getproperty或getproperty。但是,如果对象 由$obj表示的有一个getString方法,$obj.property和$obj.property将 将不同的值传递给此getString方法。这可能导致难以发现的问题。这是一个 标准化应用程序中属性名称大小写的良好做法。 如果您想知道如何设置属性值,请查阅“设置指令”一章。属性的设置 这里讨论的是什么


仅供参考,JSTL/EL中使用了相同的速记法。谢谢你的回答,它是有效的,但我不确定我是否理解其中的原因。为什么在if语句中使用getText方法时没有得到解析?所以您知道JSTL对访问器方法使用了一种约定而不是配置速记,通过这种约定,可以在JSTL中通过使用点符号键入属性名来调用带有辅助方法public String getText的私有字符串文本变量?对的更进一步,配置规范的约定是基于Oracle的JavaBean规范的。换句话说,如果您有一个遵循JavaBean命名约定的类,那么可以使用速记符号。然而,规范是。。。好具体的因为它遵循这个简写符号,所以在很多特殊情况下,事情并不像你期望的那样。例如,如果您有一个私有布尔合法变量和一个公共布尔getLegal方法,您就不能使用速记,因为根据JavaBean规范,您需要在原始布尔值前面加上is not get前缀。如果您有一个公共布尔值isLegal,我认为这是错误的,因为您使用的是包装类而不是原语。因此,虽然我无法明确回答您关于您的特定案例的问题,但我可以说,如果您阅读JavaBean规范并查看您的源代码,您将找到它
$dog.name.getText()
$dog.name.text
#foreach( $dog in $animals.dogs.children() )
    #if ($dog.name.text != 'whatever')
       ## do something
    #end
#end
$customer.address
$purchase.total
$cart.customerDiscount