首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过XQIB修改XQuery中更新的DOM

通过XQIB修改XQuery中更新的DOM
EN

Stack Overflow用户
提问于 2011-03-31 02:53:30
回答 1查看 399关注 0票数 1

菜鸟呼叫XQuery。我使用XQIB (“浏览器中的XQuery”,即用JavaScript实现的Zorba )来处理客户端。

在下面的测试文档中,如果我单击第一个按钮“添加段落”,然后单击第二个按钮“使某些段落加粗”,它将按预期工作。但是,如果我点击“添加段落”两次(不管我是否点击中间的第二个按钮),第二个按钮停止工作。

这可能是XQIB中的一个bug,还是XQuery的行为与我预期的不同?

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-31 16:59:57

XQIB应该做的是引发一个运行时错误。在您描述的情况下,local:boldparas中的替换的目标表达式返回多个节点的序列,其中根据规范,它必须是单个节点:

如果结果非空且不包含单个元素、属性、文本、注释或处理指令节点,则引发err:XUTY0008。

(摘自http://www.w3.org/TR/xquery-update-10/#id-replace)

通过如下所示迭代替换操作,您将获得所需的结果:

代码语言:javascript
复制
for $node in b:dom()//p[.='test1']
return replace node $node with <p><b>test1</b></p>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5490820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档