2012-02-07 5 views
11

Có thể đặt mỗi kết quả XQuery trên một dòng mới không? Tôi nghĩ rằng tôi nhớ có một thuộc tính để đặt ở đầu tài liệu, nhưng không thể nhớ được. :/Đặt mỗi kết quả XQuery trên một dòng mới

Tôi có tập tin .xq này:

(: declare default element namespace "http://www.w3.org/2001/XMLSchema"; :) 
for $x at $i in doc("zoo.xml")//animal 
return <li>{$i}. {$x/name/text()}</li> 

tôi nhận được kết quả chính xác, nhưng tất cả chúng đều trên một dòng duy nhất, khi tôi thực sự muốn một cái gì đó như:

<li>1. Zeus</li> 
<li>2. Fred</li> 
... 

Is điều này có thể? Cảm ơn trước cho câu trả lời của bạn! :)

Trả lời

19

... bạn có thể thêm một chuỗi xuống dòng như là một phần thứ hai của khoản lợi nhuận:

(: declare default element namespace "http://www.w3.org/2001/XMLSchema"; :) 
for $x at $i in doc("zoo.xml")//animal 
return (<li>{$i}. {$x/name/text()}</li>, '&#xa;') 

Cách làm thế nào kết quả được đăng cũng phụ thuộc vào bộ xử lý XQuery cụ thể.

4

Công cụ XQuery bạn đang sử dụng có thể có tùy chọn thụt lề đầu ra. Ví dụ. trong Zorba, tùy chọn thụt làm việc như thế này:

zorba -i -q 'for $x in 1 to 10 return <a/>' 
<?xml version="1.0" encoding="UTF-8"?> 
<a/> 
<a/> 
<a/> 
<a/> 
<a/> 
<a/> 
<a/> 
<a/> 
<a/> 
<a/> 
5

XQuery 3.0 cung cấp một tùy chọn mới serialization item-separator, mà có thể được quy định trong prolog truy vấn:

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization"; 
declare option output:item-separator "&#xa;"; 

for $x at $i in doc("zoo.xml")//animal 
return <li>{$i}. {$x/name/text()}</li> 
3

Các đặc điểm kỹ thuật XQuery 3.1 Serialization cung cấp mới "thích nghi" chế độ tuần tự hóa, xuất ra mỗi kết quả XQuery trên một dòng mới.

Một số bộ xử lý XQuery sử dụng chế độ này làm mặc định mới.