2016-02-27 55 views
0

我是XQuery的初学者。我试图写一个项目的功能,但我得到这个错误信息:exerr:错误错误:XPST0003:EOF或零长度字符串找到有效的XPath表达式的地方

EXERR:误差err:XPST0003:EOF或零长度字符串中发现,其中预计有效的XPath表达式。

这是我的XQuery:

xquery version "3.0"; 

declare function local:trovaMatricola($str as xs:string?){ 
let $liv := doc("/db/apps/prova/data/utenti.xml")/utenti/utente[matricola=$str]/livello 
let $val := local:valore($liv) 
return $val 
}; 

declare function local:valore($liv as xs:string?){ 
let $val := doc("/db/apps/prova/data/fiaba.xml")/text/$liv 
return $val 
}; 
+2

一些一般提示提出问题:如果你在你的问题中引用的数据,以确保它是可用的,最好是作为一个小的(但精心形成了XML的内容)提取,如果是大的。确保添加查询的_expected output_。英语变量和函数名称将有助于我们理解正在发生的事情(如果数据是用另一种语言编写的,考虑提供一个关于值的含义的简短“词典”是否合理)。并非所有这些都是真正需要解决的问题,但请记住一般问题。 –

回答

1

如果你不写的XQuery模块,您需要提供一个实际的查询。因为您只声明了XQuery版本和两个函数,但没有什么可以实际执行的。

这也解释了错误消息:

EXERR:误差Err:XPST0003:发现其中预期有效的XPath表达式EOF或零长度的字符串。

XQuery引擎解析了函数,但仍在寻找要执行的语句。对“XPath表达式”的限制似乎有点误导。

+0

那么我该如何编写一个XQuery模块?我试图先查询XML文档取一个值,并用它来制作的另一个XML文件的另一个查询.. 例子: 我把输入该值:1111 程序应在该文件的查询: 1111 小号 给我的标签的价值和使用这个值来使另一个文件的查询: 曾经一次.... 和我的输出应该是 “从前......” –

+0

的[BaseX文档有一个例子(http://docs.basex.org/wiki/Repository#Accessing_Modules)可能已存在足以回答你的问题。 –

0

@JensErat给了你答案,但要补充一点,这里有一个提示:有很多XQuery引擎,如果你被其中一个错误消息困惑,它可能是一个好主意想法,看看不同的XQuery引擎告诉你什么。他们谁也不会得到所有的诊断完全正确的,但这里是撒克逊人告诉你该查询:

Syntax error on line 12 at column 4 of file:/Users/mike/Desktop/temp/test.xq near {...ml")/text/$liv return $val ...} 
    XPST0003: The main module must contain a query expression after any declarations in the prolog 
Syntax error on line 12 at column 4 of file:/Users/mike/Desktop/temp/test.xq near {...ml")/text/$liv return $val ...} 
    XPST0003: Unexpected token "<eof>" in path expression 
Static error(s) in query 

我不能说我与完全满意:第二个消息是多余的,而引用一个“路径表达式”比较古怪;还有些用户可能不知道<eof>意味着“文件结束”或词法分析器往往治疗结束文件作为伪令牌;但第一条消息是专注,并且可以避免您在此处发布解释的需求。