1

パラメータを指定して関数を呼び出し、ID を送信して写真の URL を返そうとしています。ボタンをクリックしたときに要素の写真を表示するという考えですが、問題は関数を呼び出せないことです。私はそれを試してグーグルで検索したことを誓いますが、私は単にできません:P

これが関数のコードと宣言です

xquery バージョン "1.0";

名前空間 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ところで:3

4

1 に答える 1

1

明らかな 2 つの問題があります

  1. AS xs:string? -- XQuery (XPath として) では大文字と小文字が区別されると思います。したがって、AS構文的に正しいトークンは であるため、エラーが発生するはずですas

  2. 関数の本体:

.

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

XQuery (および XSLT) の関数に対して定義された初期コンテキスト ノードはありません。したがって、相対 XPath 式は未定義です。これは、何id の子ですか?id

解決策は、代わりに次のような絶対式を使用する必要があることです。

 $someParam/id 
于 2012-12-28T16:51:02.613 に答える