在尝试处理XML文档中的数据时,我希望使用单个FLWOR表达式获取大量记录 - 我这样做是通过使用'let'子句获取数据 - 所以我有多行数据。
例如
<div id="main">
<p> Text #1</p>
<p> Text #2</p>
<p> Text #3</p>
<p> Text #4</p>
</div>
现在,我理解如何获得4'p'元素 - 但是我还想为每一行分配一个序列号 - 即。我想以这种方式获得文本 -
<data>Text #1</data><sequence> Sequence #1</sequence>
<data>Text #2</data><sequence> Sequence #2</sequence>
<data>Text #3</data><sequence> Sequence #3</sequence>
<data>Text #4</data><sequence> Sequence #4</sequence>
答案 0 :(得分:0)
虽然我不完全确定<sequence/>
元素的字符串值,但一个解决方案可能如下所示:
for $p in <div id="main">
<p>Text #1</p>
<p>Text #2</p>
<p>Text #3</p>
<p>Text #4</p>
</div>/p
return (
<data>{ $p/text() }</data>,
<sequence>Sequence { replace($p, 'Text ', '') }</sequence>
)
答案 1 :(得分:0)
您可以在 FLWOR 表达式for
clause中使用at
关键字:
declare variable $div :=
<div id="main">
<p> Text #1</p>
<p> Text #2</p>
<p> Text #3</p>
<p> Text #4</p>
</div>;
for $p at $pos in $div/p
return (
<data>{$p/text()}</data>,
<sequence>Sequence #{$pos}</sequence>
)
答案 2 :(得分:0)
确实有比这样做更优雅的方式....但是它有效:
let $t := <div id="main">
<p>Text A</p>
<p>Text B</p>
<p>Text C</p>
<p>Text D</p>
</div>
for $pos in $t/p/position()
let $p := $t/p[$pos]
return (
<data>{ $p/text() }</data>,
<sequence>Sequence { $pos }</sequence>
)