跳转到内容

XQuery/在 HTML 表格中显示数据

来自维基教科书,开放世界中的开放书籍

您希望在 HTML 表格中显示您的 XML 数据,并使用彩色背景显示交替行。

数据文件

[编辑 | 编辑源代码]

假设您有一个数据文件,例如以下 XML 文件,它是术语和定义的示例词汇表

terms.xml

[编辑 | 编辑源代码]
<terms>
   <term>
      <term-name>Object Class</term-name>
      <definition>A set of ideas, abstractions, or things in the real world
      that are identified with explicit boundaries and meaning and whose properties
      and behavior follow the same rules</definition>
   </term>
   <term>
      <term-name>Organization</term-name>
      <definition>A unit consisting of people and processes established
      to perform some functions</definition>
       </term>
</terms>

<term> 标签将在您的词汇表中的每个术语重复。

您希望在 HTML 表格中显示这些术语。

屏幕图像

[编辑 | 编辑源代码]
HTML 表格屏幕图像

以下 XQuery 将执行此任务。

示例代码

[编辑 | 编辑源代码]
xquery version "1.0";
declare option exist:serialize "method=xhtml media-type=text/html";

let $my-doc := doc('terms.xml')
return
<html>
    <head>
        <title>Terms</title>
    </head>
    <body>
    <table border="1">
    <thead>
      <tr>
          <th>Term</th> 
          <th>Definition</th>
      </tr>
    </thead>
    <tbody>{
       for $term at $count in $my-doc/terms/term
            let $term-name := $term/term-name/text()
            order by upper-case($term-name)
       return
         <tr> {if ($count mod 2) then (attribute bgcolor {'Lavender'}) else ()}
           <td>{$term/term-name/text()}</td>
           <td>{$term/definition/text()}</td>
         </tr>
       }</tbody>
     </table>
   </body>
</html>

排序前计数

[编辑 | 编辑源代码]

有两个嵌套的 for 循环。外部循环具有额外的 at count 参数,该参数为每个返回的结果递增一个计数器。内部循环有一个循环,它将一个通用的排序项返回给外部循环。请注意,内部循环首先执行排序,而外部循环对每个项进行计数,以便交替行被着色。

请注意,如果您知道原始文件按正确顺序排列,则不需要嵌套的 for 循环。只需要一个带有 at $count 的 for 循环。

动态元素构造

[编辑 | 编辑源代码]

以下几行

<tr> {if ($count mod 2)
         then (attribute bgcolor {'Lavender'})
         else ()}

为奇数行(其 $count 对 2 取模不为零,因此计算结果为真)条件地创建一个浅蓝色背景颜色。这是一个动态元素构造的示例。

奇数行

<tr bgcolor="Lavender">
   <td>...</td>
</tr>

偶数行

<tr><td>...</td></tr>

它通过为表格中的奇数行条件地添加属性 bgcolor="Lavender" 来实现这一点。如果测试 ($count mod 2) 为零,即在偶数行上,将不会添加属性。

建议最佳实践是在中央级联样式表中对表格的交替行进行着色。在整个站点中保持表格格式标准的最通用方法是为每行添加语义类标签以将其标记为偶数或奇数。

<tr> {if ($count mod 2)
         then (attribute  class  {'even'})
         else (attribute  class  {'odd'})}

然后,CSS 文件将包含以下内容

.odd {background-color: Lavender;}
华夏公益教科书