Запрос 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>

};
Другие вопросы по тегам