【发布时间】:2010-12-29 19:13:02
【问题描述】:
我最初编写了一个简单的 XQuery 脚本:
$mediaNodes := doc('/db/portfolio/media_data_101109.xml'),
$query := concat('$mediaNodes//media[contains(@product,"',$product,'")'
基本上,它的作用是首先检索媒体记录的 xml 文件。然后我建立了一个查询,搜索所有 mediaNodes(xml 文件的元素),并将@product 属性与用户在浏览器中提供的内容相匹配,我使用了包含,所以不需要精确匹配。
现在我想稍微扩展一下,也就是忽略大小写。所以无论用户在浏览器中输入什么大小写,我都会将其转换为小写,我也会将节点文本转换为小写。
我在网上搜索,发现函数小写,并相应地更改了我的代码:
$query := concat('$mediaNodes//media[contains(lower-case(@product),"',lower-case($product),'")',
但这不起作用,如果我执行查询,就会出现堆溢出。使用 product=wborc 运行后得到的查询如下所示:
$mediaNodes//media[contains(lower-case(@product),"wborc")]
有人可以帮帮我吗?我不确定我是在犯语法错误还是逻辑错误。提前致谢。
【问题讨论】:
-
您的问题很不清楚: 1. 您要查询的 XML 文档是什么(请尽量减少)。 2. 这个 XML 文档的期望结果究竟是什么? 3.期望的结果是什么意思?
-
好问题,+1。请参阅我的答案以获得完整的解决方案。 :)
-
有一些小的调整 - 请参阅我最新更新的答案。
-
看起来您正在构建一个假设为 XQuery 表达式的字符串,可能用于第二步查询或非标准动态评估。这两种解决方案似乎都是一个糟糕的设计选择,主要是因为这是一个非常简单的查询......
-
@Alejandro:确切地说,这是针对 eXist db 上的 XQuery 表达式,实际上它总是使我的查询网页崩溃和堆溢出。到目前为止不知道为什么。