1

XQueryの初心者。XQIB ( "XQuery In the Browser"、つまりJavaScriptで実装されたZorba)を使用して、クライアント側で処理しています

次のテストドキュメントでは、最初のボタン[段落を追加]をクリックしてから2番目のボタン[段落を太字にする]をクリックすると、期待どおりに機能します。ただし、[段落の追加]を2回クリックすると(間にある2番目のボタンをクリックしたかどうかに関係なく)、2番目のボタンは機能しなくなります。

これはXQIBのバグである可能性が高いですか、それともXQueryの動作が予想とは異なるだけですか?

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>XQIB Test</title>
<meta charset="UTF-8"/>
<script type="text/javascript" src="mxqueryjs/mxqueryjs.nocache.js"></script>
<script type="application/xquery">
declare default element namespace "http://www.w3.org/1999/xhtml";
declare namespace hresume="http://microformats.org/profile/hresume";
declare namespace hcard="http://microformats.org/profile/hcard";

declare updating function local:addparas($loc, $evtObj) {
    insert node <p>test1</p>
        as last into b:dom()//body,
    insert node <p>test2</p>
        as last into b:dom()//body
};

b:addEventListener(b:dom()//input[@value='Add paragraphs'], "onclick", xs:QName("local:addparas"))
</script>
<script type="application/xquery">
declare updating function local:boldparas($loc, $evtObj) {
    replace node b:dom()//p[.='test1'] with <p><b>test1</b></p>
};

b:addEventListener(b:dom()//input[@value='Make some parapgraphs bold'], "onclick", xs:QName("local:boldparas"))
</script>
</head>
<body>
<h1>Insert example</h1>
<input type="button" value="Add paragraphs" />
<input type="button" value="Make some parapgraphs bold" />
<p>Hey</p>
</body>
</html>
4

1 に答える 1

0

XQIBが行うべきことは、ランタイムエラーを発生させることです。あなたが説明する状況では、local:boldparasのreplaceのターゲット式は、複数のノードのシーケンスを返します。仕様によれば、それは単一のノードでなければなりません。

結果が空ではなく、単一の要素、属性、テキスト、コメント、または処理命令ノードで構成されていない場合、[err:XUTY0008]が発生します。

http://www.w3.org/TR/xquery-update-10/#id-replaceから取得)

次のように置換操作を繰り返すことで、目的の結果が得られます。

for $node in b:dom()//p[.='test1']
return replace node $node with <p><b>test1</b></p>
于 2011-03-31T08:59:56.873 に答える