我有一个返回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 ...)。
为什么它在这种情况下有效,而不是在我使用传入的参数时?
答案 0 :(得分:2)
当函数将xml-elements作为item()返回时,您不需要解析它们。它们已经解析了。
只需使用:
for $Value in $outputFromFunction/Value
(如果您在此处调用parse-xml,则首先将其转换为字符串,即“199950100200050100”)