1

以下のようにモデル化された content.xml があります

<root>
  <childnode>
    Some text here
  </childnode>
</root>

出力が次のようになるように、 content.xmlを削除して<childnode>その値のみで更新しようとしています

<root>
  Some Text here
</root>

これを実行する関数を作成しましたが、実行するたびに「予期しないトークン: 変更」というエラーが表示されます。functx 関数を使用せずにこれを達成する方法を考えていました。

xquery version "1.0";    

declare namespace request="http://exist-db.org/xquery/request";  
declare namespace file="http://exist-db.org/xquery/file";  
declare namespace system="http://exist-db.org/xquery/system";
declare namespace util="http://exist-db.org/xquery/util";
declare namespace response="http://exist-db.org/xquery/response";

declare function local:contentUpdate()  {
    let $root := collection('/lib/repository/content')//root/childNode
    let $rmChild := for $child in $root
    modify
    (
    return rename node $child as ''
    )
};

local:updateTitle()

前もって感謝します

4

2 に答える 2

0

クエリには複数の問題があります。

  1. 更新関数はとして宣言する必要がありますupdating
  2. 定義したものとは別の関数を呼び出しています(構文エラーがまだあるため、おそらく気付かなかったでしょう)。
  3. Rename node一部の要素(または処理命令、属性)をターゲットとして想定しているため、空の文字列は許可されていません。
  4. 少なくともBaseXは、コードをXQuery 1.0として定義するときに、ステートメントを更新することを許可していません。多分存在はこれを気にしません、あなたが知る必要があるならばそれを追加してみてください。

名前を変更したくないが、すべて<childnode />のをその内容に置き換えて、を使用しますreplace node

このコードは、これらすべての問題を修正します。

declare updating function local:contentUpdate()  {
  let $root := collection('/lib/repository/content')
  return 
    for $i in $root//childnode
    return
      replace node $i with $i/data()
};

local:contentUpdate()
于 2012-06-08T17:54:32.783 に答える