Text 如何计算XML中的元素数?

Text 如何计算XML中的元素数?,text,count,xquery,basex,flwor,Text,Count,Xquery,Basex,Flwor,我希望在数据库中获得有关数据库的基本元数据。具体地说,由根文本元素包围的行元素的数量 类似于我期望COUNT在SQL中返回的值——一个整数 数据库: thufir@dur:~/flwor/group$ thufir@dur:~/flwor/group$ basex BaseX 9.0.1 [Standalone] Try 'help' to get more information. > > open people Database 'people' was opened in

我希望在数据库中获得有关数据库的基本元数据。具体地说,由根
文本
元素包围的
元素的数量

类似于我期望
COUNT
SQL
中返回的值——一个整数

数据库:

thufir@dur:~/flwor/group$ 
thufir@dur:~/flwor/group$ basex
BaseX 9.0.1 [Standalone]
Try 'help' to get more information.
> 
> open people
Database 'people' was opened in 225.24 ms.
> 
> xquery /
<text>
  <line>people</line>
  <line>joe</line>
  <line>phone1</line>
  <line>phone2</line>
  <line>phone3</line>
  <line>sue</line>
  <line>cell4</line>
  <line>home5</line>
  <line>alice</line>
  <line>atrib6</line>
  <line>x7</line>
  <line>y9</line>
  <line>z10</line>
</text>
Query executed in 215.13 ms.
> 
> exit
See you.
thufir@dur:~/flwor/group$ 
代码:


我想您只是想使用
count(/text/line)

从Martin的回答中,我发现从basex本身来看很容易:

thufir@dur:~/flwor/group$ 
thufir@dur:~/flwor/group$ basex
BaseX 9.0.1 [Standalone]
Try 'help' to get more information.
> 
> open people
Database 'people' was opened in 208.33 ms.
> 
> xquery /
<text>
  <line>people</line>
  <line>joe</line>
  <line>phone1</line>
  <line>phone2</line>
  <line>phone3</line>
  <line>sue</line>
  <line>cell4</line>
  <line>home5</line>
  <line>alice</line>
  <line>atrib6</line>
  <line>x7</line>
  <line>y9</line>
  <line>z10</line>
</text>
Query executed in 237.69 ms.
> 
> xquery count(/text/line)
13
Query executed in 20.55 ms.
> 
> exit
See you.
thufir@dur:~/flwor/group$ 

谢谢,我想这将在Java上运行,但我希望也能在FLWOR上运行。我认为是线路上的迭代导致FLWOR崩溃?我添加了一个“答案”来详细说明。我不认为有任何理由使用flower,但如果是这样,您显然希望
count(for…return…
)。XQuery初学者犯的最大错误之一(尤其是那些来自SQL的人)是将FLWOR表达式作为每个问题的解决方案。对于绝大多数查询,FLWOR表达式都是多余的。
xquery version "3.0";

for $line in db:open("people")
for $index at $count in $line/text/line
return $count
thufir@dur:~/flwor/group$ 
thufir@dur:~/flwor/group$ basex
BaseX 9.0.1 [Standalone]
Try 'help' to get more information.
> 
> open people
Database 'people' was opened in 208.33 ms.
> 
> xquery /
<text>
  <line>people</line>
  <line>joe</line>
  <line>phone1</line>
  <line>phone2</line>
  <line>phone3</line>
  <line>sue</line>
  <line>cell4</line>
  <line>home5</line>
  <line>alice</line>
  <line>atrib6</line>
  <line>x7</line>
  <line>y9</line>
  <line>z10</line>
</text>
Query executed in 237.69 ms.
> 
> xquery count(/text/line)
13
Query executed in 20.55 ms.
> 
> exit
See you.
thufir@dur:~/flwor/group$ 
xquery version "3.0";

count(
for $line in db:open("people")
return $line/text/line)