【问题标题】:How to call function in function using Exist-DB and Xquery with Xpath如何通过 Xpath 使用 Exist-DB 和 Xquery 在函数中调用函数
【发布时间】:2014-03-05 19:20:42
【问题描述】:

我发现一些关于函数中调用函数的想法,但我得到了这个错误:

NotFound No template function found for call app:PokazRodzica

但首先。这是我的主要功能

    declare function app:WyswietlAkweny($node as node(), $model as map(*), $nazwa as xs
    :string?) {

        <table border="1" width="100%">
        <th>Podrzędne</th><th>Nazwa</th><th>Typ</th><th>Powierzchnia</th><th>Edycja</th>
        {
            for $x in doc('/db/Dane/akweny.xml/')//akwen
            let $nazwa := $x/nazwa,
                $typ := $x/typ,
                $powierzchnia := $x/powierzchnia
                return <tr>
(:~ THIS DOSENT WORK :)
                    <th><a href="{app:PokazRodzica($nazwa)}"><img src="/exist/apps/Obrazki/lupa.jpg" alt="Podrzedny" /> KLIK</a></th>
                    <th bgcolor="#F46978">{$nazwa}</th>
                    <th>{$typ}</th>
                    <th>{$powierzchnia}</th>
                    <th>Edytuj</th>
                    </tr>
        }
        </table>
    };

这是我的功能当我按下图像时我想要运行的功能

declare function app:PokazRodzica($nazwa1 as xs:string?)  {


<table border="1" width="100%">
<th>Podrzędne</th><th>Nazwa</th><th>Typ</th><th>Powierzchnia</th><th>Edycja</th>
{
let $nodes := doc('/db/Dane/akweny.xml')//akweny[parent::akwen/nazwa=$nazwa1]
for $x in $nodes/*
let $nazwa := $x/nazwa/text()
let $typ := $x/typ/text()
let $powierzchnia := $x/powierzchnia/text()
    return 
       <tr>
        <th><img src="/exist/apps/Obrazki/lupa.jpg" alt="Podrzedny" /> {count($nazwa/text())} KLIK</th>
        <th bgcolor="#F46978">{$nazwa}</th>
        <th>{$typ}</th>
        <th>{$powierzchnia}</th>
        <th>Edytuj</th>
        </tr>
}</table>
};

这是我的 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<akweny>
    <akwen>
        <nazwa>Atlantycki</nazwa>
        <typ>ocean</typ>
        <powierzchnia>106450</powierzchnia>
        <akweny>
            <akwen>
                <nazwa>Północne</nazwa>
                <typ>morze</typ>
                <powierzchnia>750</powierzchnia>
            </akwen>
            <akwen>
                <nazwa>Batyckie</nazwa>
                <typ>morze</typ>
                <powierzchnia>386</powierzchnia>
                <akweny>
                    <akwen>
                        <nazwa>Botnicka</nazwa>
                        <typ>zatoka</typ>
                        <powierzchnia>117</powierzchnia>
                    </akwen>
<akweny>
                        <akwen>
                        <nazwa>Botnicka</nazwa>
                        <typ>zatoka3</typ>
                        <powierzchnia>11777</powierzchnia>
                        </akwen>
</akweny>
                </akweny>
            </akwen>
        </akweny>
    </akwen>
    <akwen>
        <nazwa>Spokojny</nazwa>
        <typ>ocean</typ>
        <powierzchnia>179700</powierzchnia>
    </akwen>
</akweny>

我这样调用 MAIN 函数:

<p class="app:WyswietlAkweny"/>

我正在尝试查找任何 akweny,它的父 akwen 有一个 nazwa 孩子和孩子以及价值为 $nazwa1 的无穷大。

【问题讨论】:

  • 这些函数返回表,但您将它们的输出存储在属性中。我怀疑这是你的意图,但不清楚。
  • 那怎么弄干净呢?

标签: xml function xpath xquery exist-db


【解决方案1】:

我想我现在明白了这个问题。我怀疑您希望在用户在查看网页时单击此锚标记时调用此函数并返回其值:

<a href="{app:PokazRodzica($nazwa)}">

这不是正在发生的事情。当您输出此锚标记时,将在返回之前评估 AVT ({}) 中的任何内容。因此,这会调用您引用的函数并将其输出按字面意思存储在该属性中。您需要的是引用一个端点,以便浏览器可以通过端点调用该函数:

<a href="/call-app-PokazRodzica.xqy?value={$nazwa}">

然后在端点脚本call-app-PokazRodzica.xqy 中,接受value 参数,并调用您的函数:

app:PokazRodzica($value-param)

现在,当您的用户单击锚点时,它将调用端点并将值传递给它。然后浏览器将返回端点调用的结果。

【讨论】:

  • 这几乎完成了。在存在数据库中我收到此错误:HTTP 错误 404 访问/exist/apps/AkwenyXML/call-app-PokazRodzica.xqy 时出现问题。原因:找不到文件/db/apps/AkwenyXML/call-app-PokazRodzica.xqy
  • 有机会在同一个页面上运行这个功能吗?
  • @Brieg 您遇到的问题很可能与 HTTP 服务器配置有关。是的,您可以让端点自己调用。
  • 路径很可能是错误的...... @Brieg,请告诉你的老师,他/她必须先教他/她的学生一些基本的 XQuery 并练习如何在不使用 eXist-db 模板框架的情况下设置应用程序 - 对于那些了解一些编程(其他语言)的人,模板框架可能难以理解。如果您希望其他人帮助您完成作业,那么您的问题确实必须更加清晰。而且你应该把帮助过你的人归功于那些帮助过你的人,而不是把别人帮助过你的代码当成你自己的。
猜你喜欢
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多