XQuery请求打开整个文件

时间:2014-02-24 12:32:33

标签: xml xquery basex

这是我的代码,旨在创建一个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 个答案:

答案 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>

};