2012-09-01 45 views
1

我試圖運行下面的XQuery代碼 -的XQuery newbie-如何顯示一些文本嵌套的if-else

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'?

回答

0

我在這裏做錯了什麼?

相當明顯

$doc被聲明爲 = "E:\Arvind\Workspace\XML\test.xml"

在下一行:

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

中的XPath僞操作者//不能是應用程序ied在一個字符串上。

要解決此問題,更改

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") 
+0

除doc()函數需要URI而不是Windows文件名外,所以它應該是doc(「file:/// E:/Arvind/Workspace/XML/test.xml」)。 –

+0

@MichaelKay,是的,我注意到了,但認爲OP的特定XQuery實現可能接受文件路徑。現在修改答案也包括你的觀察。 –

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或氧氣,直接給你的語法錯誤反饋。