0

item()* を返す関数があります。この関数の出力は次のようになります。

<Root>
  <Value>
    <Year>1999</Year>
    <A>50</A>
    <B>100</B>
  </Value>
  <Value>
    <Year>2000</Year>
    <A>50</A>
    <B>100</B>
  <Value>
</Root>

この出力は、2 番目の関数に渡されることになっています。これを解析して、別の出力を返すことができるようにしたいと考えています。fn:parse-xml($output) を使用して出力を文字列に変換しようとしましたが、 No text allowed before root elementというエラーが表示されます。ただし、2番目の関数内でローカル変数を宣言し、それに文字列出力を割り当てると、機能します。

これは機能します:

declare function function2($outputFromFunction1 as item()*) item()*{
  let sToX := fn:parse-xml(" <Root>
      <Value>
        <Year>1999</Year>
        <A>50</A>
        <B>100</B>
      </Value>
      <Value>
        <Year>2000</Year>
        <A>50</A>
        <B>100</B>
      <Value>
    </Root>")...
};

この変数を解析できます ($sToX/Value の $Value について...)。

渡された引数を使用するときではなく、この場合に機能するのはなぜですか?

4

1 に答える 1

2

関数が item() として xml 要素を返す場合、それらを解析する必要はありません。それらはすでに解析された形式になっています。

使用するだけです:

for $Value in $outputFromFunction/Value

(これに対して parse-xml を呼び出すと、最初に "199950100200050100" などの文字列に変換されます)

于 2013-07-04T19:22:55.787 に答える