Freemarker XPath表达式,用于查找具有子ID的节点

时间:2015-03-17 05:36:04

标签: freemarker

我使用Freemarker XML处理来构建菜单。我想查找当前元素或其中任何一个子元素是否具有与activeNode匹配的id。

但是我在编写XPath的Freemarker语法时遇到了很多麻烦。这似乎与具有子链接的所有节点匹配(请注意item是对客户节点的节点引用)

<#assign aNode="search-customers" />
<#assign xpath>link["@id=${aNode}"]</#assign>

<#if item[xpath][0]?has_content>
    <#assign cssClass> class="active"</#assign>
</#if>  

这是我试图匹配的xml的相关部分。例如,search-customers节点应突出显示customers节点。

<menu>
    <top title="title.home" url="/admin" icon="fa fa-home" />
    <top title="title.customers" id="customers" url="javascript:;" icon="fa fa-group">
        <link title="title.search.customers" id="search-customers" url="/admin/customers"></link>
        <link title="title.register.customer" id="register-customer" url="/admin/customers/new"></link>
        <link title="title.contact.us" id="contact-us" url="/admin/contactus"></link>
        <link title="title.subscribers" id="subscribers" url="/admin/subscribers"></link>
    </top>

理想情况下,它也会匹配当前节点ID - 因此,如果子节点ID或当前节点ID与activeNode匹配,则css应处于活动状态。

任何人都可以帮助使用Freemarker语法吗?

1 个答案:

答案 0 :(得分:0)

没关系,我最终弄明白了,我认为在使用方括号语法的文档中出现了错误....

<#if strVal=aNode || item["link[@id='${aNode}']"]?has_content>
    <#assign cssClass> class="active"</#assign>
<#else>
    <#assign cssClass></#assign>
</#if>