我錯過了一些東西,但不知道是什麼。我使用BaseX和Http服務器將REST GET放在我已經在一個數據中存儲的XML中,如下所示。使用Xquery檢索XML中的子節點選擇
<?xml version="1.0" encoding="utf-8"?>
<CarParkDataImport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.transportdirect.info/carparking B:/CODE/carparks/CarParking.xsd" xmlns="http://www.transportdirect.info/carparking">
<CarPark>
<CarParkRef>3</CarParkRef>
<CarParkName>Nunnery Lane</CarParkName>
<Location>York</Location>
<Address>Nunnery Lane--York--North Yorkshire</Address>
<Postcode>YO23 1AA</Postcode>
<Notes>Open 24 hours. Park and pay by phone in this car park by calling 01904 279279. The location number for this car park is 7709. Blue badge holders can park free for as long as they want. CCTV & toilets. Permit parking available.</Notes>
<Telephone>01904551309</Telephone>
<URL>http://www.york.gov.uk/transport/Parking/Car_parks/nunnery_ln/</URL>
</CarPark>
</CarParkDataImport>
現在我有2個XQuery查詢我已經存儲在HTTP服務器查詢
(: XQuery file: location.xq :)
declare default element namespace "http://www.transportdirect.info/carparking";
declare variable $a as xs:string external;
db:open("Car_park_data")/CarParkDataImport/CarPark[Location=$a]
和
(: XQuery file: loc.xq :)
declare default element namespace "http://www.transportdirect.info/carparking";
declare variable $a as xs:string external;
for $b in db:open("Car_park_data")/CarParkDataImport/CarPark
where $b/Location = $a
return $b/.
,所以我可以運行我的REST HTTP像(與.xq根據我所查詢的內容而有所不同
http://localhost:8984/rest?run=loc.xq&$a=York
這些都似乎工作,並帶回CarPark下的所有節點,但我如何才能帶回選擇的節點?例如CarParkName,Location和Postcode。
謝謝你,偉大工程。在BaseX中,結果回來了,注意到了,並且帶回了那個位置的所有停車場,但是當我發送REST http時,我收到以下錯誤消息。 '第2行第1列錯誤:文檔末尾有額外內容',它只顯示一個carparkname,是否會有BaseX日誌,我可以查看發生了什麼,因爲我看不到任何內容XML本身? – funkmaster20th
您可能需要將這些元素包裝在根元素中。最簡單的方法是將整個查詢包裝在一個元素構造函數中:'element results {let $ a ....}'。 – joemfb
@ funkmaster20th我編輯了我的答案。 –