XQuery无法解析item()*类型的函数参数

时间:2013-07-04 19:04:11

标签: xquery basex

我有一个返回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)将输出转换为字符串,但是我收到错误,说在根元素之前不允许文本。但是,如果我在第二个函数中声明一个局部变量并为其分配字符串输出,那么它就可以工作。

这有效:

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 ...)。

为什么它在这种情况下有效,而不是在我使用传入的参数时?

1 个答案:

答案 0 :(得分:2)

当函数将xml-elements作为item()返回时,您不需要解析它们。它们已经解析了。

只需使用:

for $Value in $outputFromFunction/Value

(如果您在此处调用parse-xml,则首先将其转换为字符串,即“199950100200050100”)