XQuery嵌套循环错误

时间:2012-10-24 10:42:45

标签: xquery oracle-osm

我使用的是OSM 7.2.0.3,我的卡带有Order Recognition Rule,其Order Data Rule(转换标签内)

在ODR中我有这个XQuery代码:

declare namespace im="http://xxx";
declare namespace xs="http://www.w3.org/2001/XMLSchema";

declare variable $order := fn:root(.)/im:Order;

<_root>
  <Order>
  {
    for $moli in $order/MainOrderLineItem
      return {
        <OrderLineItem>
          {$moli/LineItemAttributeInfo/LineItemAttribute}
        </OrderLineItem>
        {
          for $oli in $moli/OrderLineItem
          return 
            <OrderLineItem>
              {$oli/LineItemAttributeInfo/LineItemAttribute}
            </OrderLineItem>
        }
      }
  }
  </Order>
</_root>

OSM中没有编译错误,但在运行时我得到:

Invalid Order Specification Fault
Order data expression failed due to oracle.communications.ordermanagement.rule.XMLRuleException

我通过Web服务提交XML来运行OSM。

非常感谢您的回复。

1 个答案:

答案 0 :(得分:1)

return ed XML实际上应该在括号中而不是括号中。第一个返回的OrderLineItem元素和 FLWOR 表达式之间也需要逗号,而不是将其包装在大括号中:

declare namespace im="http://xxx";
declare namespace xs="http://www.w3.org/2001/XMLSchema";

declare variable $order := fn:root(.)/im:Order;

<_root>
  <Order>{
    for $moli in $order/MainOrderLineItem
    return (
      <OrderLineItem>
        {$moli/LineItemAttributeInfo/LineItemAttribute}
      </OrderLineItem>,
      for $oli in $moli/OrderLineItem
      return 
        <OrderLineItem>
          {$oli/LineItemAttributeInfo/LineItemAttribute}
        </OrderLineItem>
    )
  }</Order>
</_root>