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>

这个输出应该被传递给第二个函数。我希望能够解析它并返回不同的输出。我尝试使用 fn:parse-xml($output) 将输出转换为字符串,但出现错误 提示 No text allowed before root element。但是,如果我在第二个函数中声明一个局部变量并将其分配给它的字符串输出它可以工作。

这有效:

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

当函数将 xml 元素作为 item() 返回时,您不需要解析它们。它们已经是解析的形式。

只需使用:

for $Value in $outputFromFunction/Value

(如果在这上面调用parse-xml,会先转换成字符串,即“199950100200050100”)

于 2013-07-04T19:22:55.787 回答