如何将一个FLWOR传送到另一个?

问题描述 投票:1回答:1

简单FLWOR以获取所有数据(从电子表格was中获取:]

for $foo  in db:open("foo")
return $foo//text()

提供这种类型的输出:

...    
Smallville, XX 12345-1234
Bob 
(123) 456-7809
(123) 876-3468
Smallville, XX 12345-1234
Alice
Smallville, XX 12345-1234
Fred
(123) 654-5432
Smallville, XX 12345-1234
...

和另一个returns非数字数据:

for $foo  in db:open("foo")
return $foo//text()[not(matches(., '[0-9]'))]

哪个似乎仅返回名称。在此假设下,希望触发关闭<person>上的标签并打开新的<person>,例如:

<person>
<name>a</name>
<data>123</data>
<data>345</data>
<data>123 main st</data>
</person>

<person>
...
</person>

或类似的东西。只是真正希望将assumption上的个人分开,他们的名字中没有数字,然后在XML中创建某种实体。

只要每次找到一个“姓名”都将触发关闭标签,然后“开始”一个新人,就可以了。这里完全不确定标准的术语。

xml xslt xpath xquery flwor
1个回答
0
投票

以下内容创建了一个临时XML结构,然后遍历每个name元素,并使用person及其name元素创建了一个following-sibling::data

let $temp := 
  <doc>{
    for $foo in db:open("foo")
    return
      if (matches($foo, "[0-9]")) 
      then <data>{$foo}</data>
      else <name>{$foo}</name>
  }</doc>

for $name in $temp/name
return
  <person>{
    $name,
    $name/following-sibling::data[preceding-sibling::name[1]= $name]
  }</person>
© www.soinside.com 2019 - 2024. All rights reserved.