首页 > 解决方案 > XQuery 到 HTML 表:生成列

问题描述

我正在处理 52 个 XML 文档的集合。我正在尝试编写一个 XQuery 来从它们生成一个 HTML 表。每个文档将获得一列,大约 50 行。到目前为止,我的 XQuery 如下所示:

    declare variable $bills := collection('BillsXML/?select=*.xml');
    declare variable $week :=$bills/bill/data(@week);
    <html>
    <head></head>
    <body>
    <table>
    <tr><th>Cause</th><th>Number</th></tr>
    {
    for $b in $bills
        let $causes := $b//item/data(@cause)
        for $c in $causes
            let $deaths-per-cause := $b//item[data(@cause)=$c]/data(@number)
    
    return <tr><td>{$c}</td><td>{$deaths-per-cause}</td></tr>
    }
    </table>
    </body>
    </html>

这在运行一个 $b (文档)时效果很好:我得到一个包含两列的表格,其中 50 个死亡原因使用 $c for-loop 生成了 50 行。但我想做的也是自动生成五十二列,每个 $b(文档)一列。第一列仍应列出死亡原因,之后的每一列都应将文档的 $week 编号和该文档中的 $deaths-per-cause 排列在该列的单元格中。这可能吗?例如,我是否编写了两条 FLWOR 语句,一条用于生成列,另一条用于生成行以填充它们?如果是这样,它们如何联锁?

标签: html-tablexqueryflwor

解决方案


您还没有显示您的 XML 源代码,所以这是一个粗略的猜测,但是您想要类似的东西

for $c in $causes return 
<tr>{
  <td>{$c}</td>,
  for $b in $bills return
     <td>{$b//item[@cause=$c]/data(@number)}</td>
}</tr>

推荐阅读