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

XQuery无法分析item()类型的函数参数*,xquery,basex,Xquery,Basex,我有一个函数返回item()*。此函数的输出如下所示: <Root> <Value> <Year>1999</Year> <A>50</A> <B>100</B> </Value> <Value> <Year>2000</Year> <A>50</A> <B>

我有一个函数返回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>

1999
50
100
2000
50
100
这个输出应该传递给第二个函数。我希望能够解析它并返回不同的输出。我曾尝试使用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>")...
};
声明函数function2($outputFromFunction1作为item()*)item()*{
让sToX:=fn:解析xml(“
1999
50
100
2000
50
100
")...
};
我能够解析这个变量(对于$sToX中的$Value/Value…。


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

当函数以item()形式返回xml元素时,您不需要解析它们。它们已经以解析形式存在

只需使用:

for $Value in $outputFromFunction/Value

(如果在此调用parse xml,它首先会转换为字符串,即“1999501002000050100”)

请参见@BeniBelas answer。此外,parse xml函数需要xs:string作为元素,因此如果传入item(),则会出现错误。但是您尝试失败的原因是第一个开始标记之前的前导空格:XML,出于其自身最为熟知的原因,不允许这样做。我是在$outputFromFunction1/Root/value中为$value而不是$outputFromFunction1/value中为$value而做的