XQuery/树视图
外观
< XQuery
您需要一个通用函数来创建层次数据的表格视图。
我们将编写一个递归函数来显示每个节点,然后在 HTML 表格中显示每个子节点。
有些系统称之为 XML 数据的“网格视图”。
以下函数生成一个 HTML 表格,其中包含子节点的嵌套子表格。
declare function local:element-to-nested-table($element) {
if (exists ($element/(@*|*)))
then
<table>
{if (exists($element/text()))
then <tr class="text">
<th></th>
<td>{$element/text()}</td>
</tr>
else ()
}
{for $attribute in $element/@*
return
<tr class="attribute">
<th>@{name($attribute)}</th>
<td>{string($attribute)}</td>
</tr>
}
{for $node in $element/*
return
<tr class="element">
<th>{name($node)}</th>
<td>{local:element-to-nested-table($node)}</td>
</tr>
}
</table>
else $element/text()
};
请注意,显示不同类型项目(文本、属性、元素)的行被分类,以便可以对其进行样式设置。
此函数可用于脚本中,为任何 XML 文档提供查看器。
declare namespace hc ="http://exist-db.org/xquery/httpclient"; declare option exist:serialize "method=xhtml media-type=text/html indent=yes"; (: function declaration :) let $uri := request:get-parameter("uri",()) let $element:= httpclient:get(xs:anyURI($uri),true(),())/hc:body/html return <html> <head> <title>Tree view</title> <style type="text/css"> th {{border-style:double}} tr {{border-style:dotted}} tr .attribute {{font-style:italic}} td {{border-style:ridge}} </style> </head> <body> <h1>Tree view of {$uri} </h1> {local:element-to-nested-table($element)} </body> </html>
例如