onclick错误调用Xquery函数

时间:2012-12-28 15:55:59

标签: xml xpath xhtml xquery exist-db

我正在尝试用参数调用一个函数,发送一个id并返回一张照片的url,想法是当你点击一个按钮时显示该元素的照片,问题是我不能打电话给我,我发誓,我尝试了,并用Google搜索,但我根本不能:P

这是函数的代码和声明

xquery版本“1.0”;

声明namespace local =“local”; 声明选项存在:serialize“method = xhtml media-type = text / html”;

xquery version "1.0";

declare namespace local = "local";
declare option exist:serialize "method=xhtml media-type=text/html";


    declare function local:showPhoto($id as xs:decimal?)AS xs:string?
    {
    for $dir in doc("pubs.xml")//dir
    where  id= $dir/id
    return $dir/photo/text();
    };

这里是表格和代码来调用它,确定如果你知道一个更好的方法来做它只是告诉我:P(当然我是一个小菜鸟,所以我相信你可以告诉我是一个更好的方法来做到这一点)

<table id="pubs" border="1">
        { 
        for $directorio in doc("/db/Ocio/pubs.xml")//dir
        order by $dir/name
        return
            <tr>
            <td>{$dir/name/text()}</td>
            <td><a href="{$dir/web/text()}">Web url</a></td>
            <td><input onclick="{local:showPhoto($dir/id)" type="button" value="MOAR INFO"></input></td>
            </tr>
        }
    </table>

也许这里有一个错误,但这是因为我将代码翻译成英文,当我执行ir时这是错误:

XPDY0002:...的未定义上下文序列

不知道该怎么做所以我问它,非常感谢你提前:D:D:D

X-mas btw:3

1 个答案:

答案 0 :(得分:1)

两个问题很明显

  1. AS xs:string? - 我认为XQuery(作为XPath)区分大小写。因此,AS应该引发错误,因为语法上合法的令牌是as

  2. 功能正文:

  3. for $dir in doc("pubs.xml")//dir
        where  id= $dir/id
        return $dir/photo/text();
    

    在XQuery(和XSLT)中没有为函数定义初始上下文节点。因此,任何相对XPath表达式都是未定义的。这是id的情况 - 孩子id是什么?

    解决方案必须使用绝对表达式 - 例如:

     $someParam/id