2012-12-23 52 views
0

我有2個XML文件,第一個包含氣象措施,第二個位置的數據:XQuery:爲什麼我的請求在許多XML文件中不起作用?

measures.xml

<measure latitude="45.90298482482" longitude="8.92092094"> 
    ... 
</measure> 
<measure latitude="45.29848284" longitude="8.72474724"> 
    ... 
</measure> 
... 

locations.xml

<location latlng="45.9029,8.9209"> 
    <address>8, Denver Road</address> 
    <place>Goodcity</place> 
</location> 
<location latlng="45.2984,8.7247"> 
    <address>3, New Avenue</address> 
    <place>Goodcity</place> 
</location> 

所以我想如下所示:存儲給定位置的所有位置,然後嘗試使用子字符串獲取與其相對應的度量。這是我的嘗試,但一直返回0:

for $l in //location 
where $l/place/string() = 'Goodcity' 
return 
let $test := $l/@latlng/string() 
return 
for $m in //measure 
where concat(substring($m/@latitude/string(),0,8),',',substring($m/@longitude/string(),0,7)) = $test 
return $m 

任何想法?

編輯:問題並不來自我使用susbtring(lat,0,8)substring(long,0,7)的事實,我知道我的位置文件,這些將始終返回帶有4位小數的數字。

編輯2:終於它的工作,雖然我的要求很長,你認爲有一種方法可以簡化它嗎?

+0

您需要改善問題的質量:1.兩個「XML文件」都包含非格式良好的XML文檔。 2.你的代碼不縮進,難以閱讀。 3.你在使用'substring()'函數時有明顯的錯誤。 XPath是基於1的,而不是基於0的。你沒有提供確切的想要的結果。請*編輯*問題並改進。 –

回答

1

如果有兩個獨立的XML文檔的話,我希望看到類似

for $l in doc('location.xml')//location... 

for $m in doc('measures.xml')//measure... 

您使用比較字符串()似乎很容易出錯。爲什麼45.90298482482四捨五入到45.9029而不是45.9030?但我想你比我們更瞭解自己的數據。

相關問題