使用XQuery动态显示上一个/下一个div-递归吗?

时间:2018-10-23 06:11:24

标签: html xml recursion xquery exist-db

认识社区,

我想简单地实现以下目标:我有一个XML文件,其中包含列出的披萨(这是一种测试文件)。我的页面有一个选择菜单,用户可以从中选择一个披萨和披萨大小,然后两者都显示在下面。内容仅在用户选择后显示。这是功能:

declare function app:showpizza2($node as node(), $model as map(*)){

    let $pizza1 := request:get-parameter('selectMenu1', '')
    let $size1 := request:get-parameter('size1', '')
    return

    for $pizza in $app:pizza//pizza
    where $pizza/@id eq $pizza1
    let $id := $pizza/@id
    return

    (<a data-key="{ $id }" class="person"><div>{ $pizza1 }</div></a>,
    <div>{ $size1 }</div>)    
};

现在,我要使用第二个功能来构建上一个/下一个按钮,以获取当前显示的披萨,在XML树中找到它,然后再上下移动一步。到目前为止,我可以使用以下几行在上方或下方显示一个披萨:

declare function app:previousPizza($node as node(), $model as map(*)){

    let $pizza1 := request:get-parameter('selectMenu1', '')
    return 

    for $pizza in $app:pizza//pizza
    where $pizza/@id eq $pizza1
    let $previousPizza := $pizza/preceding::pizza[1]
    return 

        <p>{ $previousPizza }</p>
};

当然,问题是作为“当前披萨参数”,我只从选择菜单中选择用户选择的值。因此,我想这是一个典型的递归问题,因为我想拥有一个在单击按钮后始终采用当前参数的函数,但我真的不知道如何实现这一点。你能帮忙吗?

这是我调用这些函数的html文件:

<div class="row">
    <div class="col-sm-4">        
        <!-- form for choosing pizza -->
        <form action="?">                   
            <!-- select Pizza type -->
            <select name="selectMenu1" id="pizzamenu1" 
                data-placeholder="Pizza wählen" style="width:150px">
                <option value=""></option>
                <option value="pizza1">Pizza 1</option>
                <option value="pizza2">Pizza 2</option>
                <option value="pizza3">Pizza 3</option>
            </select>              
            <!-- select pizza size -->
            <select name="size1" data-placeholder="Größe wählen"
                style="width:150px;" onchange="this.form.submit()">
                <option value=""></option>
                <option value="family">Familien Pizza</option>
                <option value="medium">Mittel Pizza</option>
                <option value="small">Kleine Pizza</option>
            </select>
        </form>
    </div>
</div>

<div class="row">
    <div class="col-sm-4">              
        <!-- showpizza2 returns chosen pizza from select menu -->
        <div data-template="app:showpizza2"/>             
        <!-- Show previous pizza -->
        <div data-template="app:previousPizza"/>
    </div>
</div>

谢谢。

1 个答案:

答案 0 :(得分:0)

由于用户选择的披萨的值来自html列表,因此位于$model中。您的下一个/上一个按钮的Xquery函数应该访问$ model以在您想要的位置开始。

我们需要查看如何在.html文件中调用xquery模块,以便为您提供工作代码示例。但是您描述的问题很可能是从那里开始的。

请参阅Using the Model to Keep Application Data的文档