1

我正在尝试运行以下 XQuery 代码-

declare variable $doc="E:\Arvind\Workspace\XML\test.xml"
let $page_title:= $doc//title[contains(.,'Error 404')]
let $assignee_block := $doc//div[@class="patent_bibdata" and contains(.,'Original        Assignee')]
for $assignee_link in $assignee_block/a 
for $assignee_link_url in $assignee_link/@href
where  contains($assignee_link_url,'inassignee') 
 return
if($page_title) then
     '404'
 else if ($assignee_block) then 
        return data($assignee_link)
  else return 'Missing' 

但是我收到了这个错误-

 XQuery syntax error in #...) else return 'Missing'#:
 Unexpected token "<eof>" in path expression

我在这里做错了什么?如何在最后的 else 中显示静态文本“Missing”?

4

2 回答 2

0

我在这里做错了什么?

很明显

$doc被声明为字符串="E:\Arvind\Workspace\XML\test.xml"

在下一行:

let $page_title:= $doc//title[contains(.,'Error 404')] 

XPath 伪运算符//不能应用于字符串。

要更正此问题,请更改

declare variable $doc="E:\Arvind\Workspace\XML\test.xml"

declare variable $doc=doc("E:\Arvind\Workspace\XML\test.xml")

此外,因为doc()接受URI,所以文件路径必须如下所示:

declare variable $doc=doc("file:///E:/Arvind/Workspace/XML/test.xml")
于 2012-09-01T23:28:41.730 回答
0

if表达式中,不需要指定return关键字。接下来,变量声明需要:=而不是=

declare variable $doc := "E:\Arvind\Workspace\XML\test.xml";
let $page_title := $doc//title[contains(.,'Error 404')]
let $assignee_block := $doc//div[@class="patent_bibdata" and contains(.,'Original        Assignee')]
for $assignee_link in $assignee_block/a 
for $assignee_link_url in $assignee_link/@href
where contains($assignee_link_url,'inassignee') 
return
  if($page_title) then '404'
  else if ($assignee_block) then data($assignee_link)
  else 'Missing' 

在开发过程中,使用直接为您提供语法错误反馈的编辑器(例如 BaseX GUI 或 oXygen)可能会有所帮助。

于 2012-09-01T20:24:03.580 回答