0

在尝试从 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>
4

3 回答 3

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>
)
于 2012-09-04T13:29:42.193 回答
0

您可以在FLWOR表达式的子句at中使用关键字:for

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>
)
于 2012-09-04T14:11:30.447 回答
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>
)
于 2012-09-04T14:43:43.503 回答