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

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

要素にどのような文字列値が必要かは完全にはわかりませんが<sequence/>、1 つの解決策は次のようになります。

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

このようにするよりもエレガントな方法は確かにあります....しかし、それは機能します:

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 に答える