filter - XQuery - 仅检索部分信息

标签 filter limit xquery

我使用 XQuery 进行统计。我有一份这样的文档:

<tr>
  <td>Element 1</td>
  <td>100</td>
</tr>
<tr>
  <td>Element 2</td>
  <td>80</td>
</tr>
<tr>
  <td>Element 3</td>
  <td>40</td>
</tr>
<tr>
  <td>Element 4</td>
  <td>12</td>
</tr>
<tr>
  <td>Element 5</td>
  <td>8</td>
</tr>

并且只想检索此文档的一部分:我只想元素数量总和的 80%(实际上是帕累托分布)。

在本例中,我总共有 240 个元素。我希望输出中包含第一个元素,以便元素总数为 192 (240*80/100)。

在此示例中,理想的输出将仅包含前三个元素,如下所示:

<tr>
  <td>Element 1</td>
  <td>100</td>
</tr>
<tr>
  <td>Element 2</td>
  <td>80</td>
</tr>
<tr>
  <td>Element 3</td>
  <td>40</td>
</tr>

我希望我说清楚了:s。我找了很久,没有成功,我不知道该怎么做......

非常感谢

最佳答案

使用:

   for $total in sum(/*/*/td[2]),
        $pareto in $total*80 div 100,
        $i in 1 to count(/*/*)
      return
        if(sum(/*/*[position() le $i]/td[2]) ge $pareto
         and
           sum(/*/*[position() lt $i]/td[2]) lt $pareto
           )
           then /*/*[position() le $i]
           else ()

当这个 XPath 表达式(是的,这是一个 XQuery 表达式,也是一个 XPath 2.0 表达式)根据提供的 XML 进行计算时(包装到单个 tope 元素中以形成格式良好的 XML 文档):

<table>
    <tr>
        <td>Element 1</td>
        <td>100</td>
    </tr>
    <tr>
        <td>Element 2</td>
        <td>80</td>
    </tr>
    <tr>
        <td>Element 3</td>
        <td>40</td>
    </tr>
    <tr>
        <td>Element 4</td>
        <td>12</td>
    </tr>
    <tr>
        <td>Element 5</td>
        <td>8</td>
    </tr>
</table>

产生了想要的正确结果:

<tr>
    <td>Element 1</td>
    <td>100</td>
  </tr>
<tr>
    <td>Element 2</td>
    <td>80</td>
  </tr>
<tr>
    <td>Element 3</td>
    <td>40</td>
</tr>

关于filter - XQuery - 仅检索部分信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10252715/

相关文章:

filter - Power BI Embed URL-multiple 过滤器

javascript - Angularjs:如何应用 NOT 过滤器?

r - 如何过滤数据框

php - 防止PHP超时

sql - XQuery 存在检查选择 sql 查询

android - 我在按文本过滤时遇到问题

mysql - 为什么 MYSQL 较高的 LIMIT 偏移量会减慢查询速度?

c++ - Boost Enum 256 元素限制

sql-server - 查询 XML 列与另一个列