我如何对一个非结构化列表进行分组,以便每个代表名称的字母条目然后“具有”嵌套为该名称的数字数据?所需的output将是任何形式的嵌套列表,而不必是HTML
:
并非所有节点都将具有三个“子节点”,这是一种one-to-many
关系:在零和较大数之间。
raw数据:
thufir@dur:~/flwor/people$
thufir@dur:~/flwor/people$ basex
BaseX 9.0.1 [Standalone]
Try 'help' to get more information.
>
> open people
Database 'people' was opened in 217.37 ms.
>
> xquery /
<text>
<line/>
<line>a</line>
<line>1</line>
<line>2</line>
<line>3</line>
<line>b</line>
<line>4</line>
<line>5</line>
<line>6</line>
<line>c</line>
<line>7</line>
<line>8</line>
<line>9</line>
<line/>
</text>
Query executed in 227.6 ms.
>
> exit
See you.
thufir@dur:~/flwor/people$
某些输出:
thufir@dur:~/flwor/people$
thufir@dur:~/flwor/people$ basex each.xq
<ul>
<li>a123b456c789</li>
</ul>thufir@dur:~/flwor/people$
thufir@dur:~/flwor/people$ basex names.xq
a
b
cthufir@dur:~/flwor/people$
thufir@dur:~/flwor/people$ basex pipe.xq
<doc>
<data>
<text>
<line/>
<line>a</line>
<line>1</line>
<line>2</line>
<line>3</line>
<line>b</line>
<line>4</line>
<line>5</line>
<line>6</line>
<line>c</line>
<line>7</line>
<line>8</line>
<line>9</line>
<line/>
</text>
</data>
</doc>thufir@dur:~/flwor/people$
thufir@dur:~/flwor/people$
简单查询:
thufir@dur:~/flwor/people$
thufir@dur:~/flwor/people$ cat each.xq
xquery version "3.0";
declare namespace office="urn:oasis:names:tc:opendocument:xmlns:text:1.0";
<ul>
{
for $foo in db:open("people")
return <li>{data($foo)}</li>
}
</ul>
thufir@dur:~/flwor/people$
thufir@dur:~/flwor/people$ cat names.xq
xquery version "3.0";
declare namespace office="urn:oasis:names:tc:opendocument:xmlns:text:1.0";
for $foo in db:open("people")
return $foo//text()[not(matches(., '[0-9]'))]
thufir@dur:~/flwor/people$
thufir@dur:~/flwor/people$ cat pipe.xq
<doc>{
for $foo in db:open("people")
return
if (matches($foo, "[0-9]"))
then <data>{$foo}</data>
else <name>{$foo}</name>
}</doc>
thufir@dur:~/flwor/people$
简化earlier问题,使其更加具体。
如果使用3.0或3.1,请使用FLWOR表达式的“ window”子句。有点像
for tumbling window $w in line
start $s when matches($s, '[a-z]')
return <group key="$s">{$w}</group>
未经测试,可能需要更正或改编。
嗯,这看起来很有希望。但是,尚不确定在逻辑上区分文本的方式,以便“ joe”具有一个键,而“ phone1”具有另一个键。
输入:
<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>
输出:
<group key="$s">phone1</group>
<group key="$s">phone2</group>
<group key="$s">phone3</group>
<group key="$s">cell4</group>
<group key="$s">home5</group>
<group key="$s">atrib6</group>
<group key="$s">x7</group>
<group key="$s">y9</group>
<group key="$s">z10</group>
代码:
xquery version "3.0";
for $line in db:open("foo.txt")//text()
for tumbling window $w in $line
start $s when matches($s, '[0-9]')
return <group key="$s">{$w}</group>