0

関数 XQuery がファイル tratta.xml のインスタンスから id_fermata を返すようにします。ファイル tratta.xml の id_linea は、linea.xml の id と一致します。

ファイル linea.xml は次のとおりです。

<root_linea >

 <linea id="ID_180">
    <nome>180</nome>
    <tipologia>circolare</tipologia>
    <e_ricorsiva>true</e_ricorsiva>
    <orario_prima_partenza>09:20:00</orario_prima_partenza>
    <cadenza_mattina>20</cadenza_mattina>
    <cadenza_pomeriggio>20</cadenza_pomeriggio>
    <cadenza_sera>20</cadenza_sera>
    <cadenza_notte>20</cadenza_notte>
    <id_tratta>ID_1</id_tratta>
    <id_corsa_effettiva>ID_1</id_corsa_effettiva>
    <id_corsa_effettiva>ID_2</id_corsa_effettiva>
 </linea>
</root_linea>

ファイルtratta.xmlは次のとおりです。

          <root_tratta>         
              <tratta id="ID_1">
               <id_fermata> ID_1 </id_fermata>
               <id_linea>ID_180</id_linea>
               <tratta_successiva>ID_2</tratta_successiva>
              </tratta>
          </root_tratta>

関数 XQuery は次のとおりです。

         declare function local:retrivalInfo() as element()* {
          let $id := request:get-parameter("id", '') 
          let $linee := doc("linea.xml")/root_linea/linea
          for $lin in $linee
          where $lin/nome = $id 
          return(
            let $tratte := doc("tratta.xml")/root_tratta/tratta
            for $tra in $tratte 
            where $tra/id_linea=$lin/@id
           return(
              <tr>
                <td><font color="white">{data($tra/id_fermata)}</font></td>
              </tr>
           )
        )        
      };

この関数の問題は、何も表示されないことです。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

私にとってはうまくいきます。id = 180 の出力は次のとおりです。<tr> <td><font color="white"> ID_1 </font></td> </tr>

get リクエストで正しい id パラメータを設定していない可能性がありますか? または、サーバー上のファイルが見つかりませんか? または、IDを比較できないファイル内のスキーマ(そのようなものが存在する場合)?

また、where を [] に置き換えると、関数をかなり単純化できます。次に、2 つの戻り値を使用する必要さえありません。

     declare function local:retrivalInfo() as element()* {
      let $id := request:get-parameter("id", '') 
      for $lin in doc("linea.xml")/root_linea/linea[nome = $id]
      let $tra := doc("tratta.xml")/root_tratta/tratta[id_linea=$lin/@id]
      return(
          <tr>
            <td><font color="white">{data($tra/id_fermata)}</font></td>
          </tr>
       )

  };

(正しいスキーマを使用すると、ID付きの要素関数を使用することさえできるかもしれません)

于 2013-02-07T18:21:40.723 に答える