Запрос XQuery открывает весь файл
Вот мой код, который направлен на создание запроса 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>
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>
};