XQuery无法分析item()类型的函数参数*
我有一个函数返回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>
<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而做的