这是我的代码,旨在创建一个XQuery请求,以便在xml文档中找到一个单词(personne.xml,如下所示),但我有一个问题:变量$var
包含整个xml文件,即使我选择了节点$books-doc/Dictionnaire/mot
。
declare namespace page = 'http://basex.org/modules/web-page/traitement.xq';
declare
%rest:path("")
%output:method("xhtml")
%output:omit-xml-declaration("no")
%output:doctype-public("-//W3C//DTD XHTML 1.0 Transitional//EN")
%output:doctype-system("http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd")
function page:start() as element(Q{http://www.w3.org/1999/xhtml}html)
{
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Recherche de mot</title>
</head>
<body>
<h3>Mon dictionnaire</h3>
<p>Veuillez écrire mot à chercher</p>
<form method="post" action="traitement">
<p>Votre mot:<br />
<input name="mot" size="50"></input>
<input type="submit" /></p>
</form>
</body>
</html>
};
declare
%rest:path("/traitement")
%rest:POST
%rest:form-param("mot","{$mot}", "(no mot)")
function page:recherche($mot as xs:string) as element(Q{http://www.w3.org/1999/xhtml}html)
{
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Recherche du mot: {$mot} </title>
</head>
<body>
<h1>Recherche du Mot: {$mot}</h1>
<p> Letraitement :
{
let $books-doc := doc("personne.xml")
for $var in $books-doc/Dictionnaire/mot
return
if ($var/genre != $mot) then
<li> {$var/genre}</li>
else
<li> {$var/genre} </li>
}
</p>
</body>
</html>
};
page:start()
XML文件personne.xml:
<Dictionnaire>
<mot>
<genre>Mot 1</genre>
<synonyme>syno 1</synonyme>
<definition>Def 1</definition>
</mot>
<mot>
<genre>Mot 2</genre>
<synonyme>syno 2</synonyme>
<definition>Def 2</definition>
</mot>
</Dictionnaire>
答案 0 :(得分:1)
这是命名空间问题。您在
中包含默认命名空间 <html xmlns="http://www.w3.org/1999/xhtml">
您要么必须定义正确的命名空间,要么可以使用通配符操作符,例如
declare function page:recherche($mot as xs:string) as element(Q{http://www.w3.org/1999/xhtml}html)
{
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Recherche du mot: {$mot} </title>
</head>
<body>
<h1>Recherche du Mot: {$mot}</h1>
<p> Letraitement :
{
let $books-doc := doc("personne.xml")
for $var in $books-doc/*:Dictionnaire/*:mot
return
if ($var/*:genre != $mot) then
<li> {$var/*:genre}</li>
else
<li> {$var/*:genre} </li>
}
</p>
</body>
</html>
};