XQuery/HTML 表格檢視
外觀
< XQuery
(重定向自 XQuery/Table View)當我們有一個具有統一表格結構的 XML 檔案時,其中沒有重複或複合子元素,通用表格檢視非常方便。我們可以使用 XML 元素名稱作為列標題。
這是一個實現此目的的函式。它接受一個元素序列,並建立一個 HTML 表格,每個節點對應表格的一行。它使用 name() 函式進行一些自省以獲取第一個節點子元素的名稱,從而形成列標題。對於每個節點,子元素透過節點名稱訪問,因此不需要所有元素都存在或以與第一個節點相同的順序存在。
xquery version "1.0";
declare function local:sequence-to-table($seq) {
(: assumes all items in $seq have the same simple element structure determined by the structure of the first item :)
<table border="1">
<thead>
<tr>
{for $node in $seq[1]/*
return <th>{name($node)}</th>
}
</tr>
</thead>
{for $row in $seq
return
<tr>
{for $node in $seq[1]/*
let $data := string($row/*[name(.)=name($node)])
return <td>{$data}</td>
}
</tr>
}
</table>
};
給定具有 統一表格結構 的 XML
以下指令碼將建立 HTML 表格
xquery version "1.0";
declare option exist:serialize "method=xhtml media-type=text/html";
local:sequence-to-table ( ) {.. };
let $data := doc("furniture.xml")/*
return local:sequence-to-table($data/*)
如果您知道資料集中的第一個節點包含表格中所有列的所有元素,則這種方法是理想的。
這種方法在後面的資料庫示例中用於顯示計算出的序列。
如果您使用嚴格的 XHTML,則必須新增以下行。這將所有 HTML 標籤(<table>,<htead>,<th>,<tbody>,<tr> 和 <td>)放在正確的名稱空間中。
declare base-uri "http://www.w3.org/1999/xhtml";
類似的方法可用於將序列匯出為 CSV。
xquery version "1.0";
declare option exist:serialize "method=text media-type=text/text";
declare variable $sep := ',';
declare variable $eol := ' ';
declare function local:sequence-to-csv($seq) as xs:string {
(: returns a multi-line string of comma delimited strings :)
string-join(
(string-join($seq[1]/*/name(.),$sep),
for $row in $seq
return
string-join(
for $node in $seq[1]/*
let $data := string($row/*[name(.)=name($node)])
return
if (contains($data,$sep))
then concat('"',$data,'"')
else $data
, $sep)
),$eol )
};
let $xml := doc("furniture.xml")/*
return local:sequence-to-csv($xml/*)
要直接從瀏覽器將檔案儲存到命名檔案中以載入到電子表格中,請新增
let $header := response:set-header("content-disposition","attachment; filename=furniture.csv")